UITableViewCell setSelectedBackground no muestra el marco correctamente

Estoy teniendo dificultades para configurar adecuadamente theBackgroundView seleccionado para un UITableViewCell en el método cellForRowAtIndexPath. He probado algunas variaciones de código …

CGRect customFrame = CGRectMake(cell.frame.origin.x + 1.0f, cell.frame.origin.y, cell.frame.size.width - 22.0f, cell.frame.size.height); UIView *cellBackground = [[[UIView alloc] initWithFrame:customFrame] autorelease]; cellBackground.backgroundColor = [UIColor colorWith8BitRed:0 green:0 blue:0 alpha:0.1f]; cell.selectedBackgroundView = cellBackground; 

Con este fragment, la celda exhibe el cambio de color apropiado, pero las dimensiones del marco no son las que especificé (parecen ser las dimensiones de cell.frame aunque especificé la vista para inicializar con mi customFrame)

He intentado un enfoque más: crear una vista principal con una subvista secundaria. El marco de la vista principal tiene las mismas dimensiones que la celda y el marco de la subunidad secundaria contiene mis dimensiones de CustomFrame. Cuando configuro la vista principal como backgroundView, se aplican las dimensiones frame customFrame. Sin embargo, cuando bash establecer la vista primaria como SelectedBackgroundView, no veo ninguna vista al seleccionar una celda.

 CGRect customFrame = CGRectMake(cell.frame.origin.x + 1.0f, cell.frame.origin.y, cell.frame.size.width - 22.0f, cell.frame.size.height); UIView *parentView = [[[UIView alloc] initWithFrame:cell.frame] autorelease]; UIView *childView = [[[UIView alloc] initWithFrame: customFrame] autorelease]; [parentView addSubview:childView]; childView.backgroundColor = [UIColor colorWith8BitRed:0 green:0 blue:0 alpha:0.1f]; cell.selectedBackgroundView = parentView; 

Parece bastante difícil personalizar las dimensiones del marco de SelectedBackgroundView. Cualquier ayuda sería apreciada. ¡Gracias!

Necesita esto en su Custom TableViewCell

 - (void)layoutSubviews { [super layoutSubviews]; self.selectedBackgroundView.frame = CGRectMake(cell.frame.origin.x + 1.0f, cell.frame.origin.y, cell.frame.size.width - 22.0f, cell.frame.size.height); } 

Tuve que rascarme la cabeza. Es un poco estúpido porque de una forma u otra necesitas el doble de marco. Por supuesto, puede usar define o incluso una propiedad para la UIView sí, pero aún así …

Solo pude encontrar eso gracias a Ortwin Gentz : ¡accesorios para él!