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.