ios uitableview uikit ios7.1

No se puede establecer clipToBounds en el contenidoView de UITableViewCell en iOS 7.1



uikit ios7.1 (4)

El rediseño de iOS 7 resultó en un cambio en la jerarquía de UITableViewCells de UITableViewCells . La vista de contenido de la celda se envolvió en una clase privada llamada UITableViewCellScrollView .

En iOS 7, UITableViewCellScrollView tiene clipsToBounds establecidos en YES y UITableViewCellContentView tiene clipToBounds establecido en NO .

En iOS 7.1, UITableViewCellScrollView tiene clipsToBounds establecidos en NO y UITableViewCellContentView tiene clipToBounds establecido en NO.

Si llama a [[self contentView] setClipsToBounds:YES] en iOS 7.1 se [[self contentView] setClipsToBounds:YES] . En el momento en que se llama a layoutSubviews en la celda, UITableViewCellContentView tiene clipToBounds establecido en NO de nuevo.

[[self contentView] superview] setClipsToBounds:YES] funciona en iOS 7.1 y establece el clipToBounds de UITableViewCellScrollView en YES, pero esta es una solución muy frágil.

Anular layoutSubview en la celda y llamar a [[self contentView] setClipsToBounds:YES] funciona pero es otra solución frágil.

¿Alguien sabe por qué se ha hecho este cambio y una solución más robusta?


Como se discutió en los comentarios, la única solución ahora en iOS7.1 es establecer clipsToBounds en la celda.


En iOS 8, la verificación de las "subvistas de clips" de la celda en el XIB no funcionó.

Lo que sí funciona es:

- (void)awakeFromNib { [super awakeFromNib]; // Initialization code self.clipsToBounds = YES; }


Encontré el problema, y ​​finalmente resolví este problema confuso de una manera fea.

// Create a subclass of UITableView // Then override setClipsToBounds: - (void)setClipsToBounds:(BOOL)clipsToBounds { [super setClipsToBounds:YES]; }


Es bastante molesto. Lo que hice fue agregar una UIView en contentView con un tamaño idéntico (y autorizingMask en ancho), agregar el contenido relevante a esta vista y establecer clipsToBounds.