Ответ 1
Как уже говорилось в комментариях, единственным решением в iOS7.1 является установка clipsToBounds
в самой ячейке.
Редизайн iOS 7 привел к изменению иерархии представлений UITableViewCells
. Представление содержимого ячейки было обернуто в частный класс под названием UITableViewCellScrollView
.
В iOS 7 UITableViewCellScrollView
установлен clipsToBounds
установлен на YES
, а UITableViewCellContentView
имеет clipToBounds
установлен на NO
.
В iOS 7.1 UITableViewCellScrollView
установлен clipsToBounds
на NO
, а UITableViewCellContentView
имеет clipToBounds
установлен на NO.
Если вы вызываете [[self contentView] setClipsToBounds:YES]
в iOS 7.1, он его вставляет. К моменту, когда layoutSubviews вызывается в ячейке UITableViewCellContentView, ClipPoBounds снова установил NO.
[[self contentView] superview] setClipsToBounds:YES]
работает в iOS 7.1 и устанавливает UITableViewCellScrollView clipToBounds в YES, но это очень хрупкое решение.
Переопределение layoutSubview в ячейке и вызов [[self contentView] setClipsToBounds:YES]
работает, но это еще одно слабое решение.
Кто-нибудь знает, почему это изменение было сделано и более надежное решение?
Как уже говорилось в комментариях, единственным решением в iOS7.1 является установка clipsToBounds
в самой ячейке.
Это довольно раздражает. То, что я сделал, - это добавить UIView в contentView с одинаковым размером (и авторезисткой маска по ширине), добавить соответствующий контент в это представление и установить для него клипы для него.
Я ударил по какой-то проблеме, и я решил эту запутанную проблему уродливо. Наконец,
// Create a subclass of UITableView
// Then override setClipsToBounds:
- (void)setClipsToBounds:(BOOL)clipsToBounds {
[super setClipsToBounds:YES];
}
В iOS 8 проверка ячейки "Подвижность клипов" в XIB не сработала.
Что такое работа:
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
self.clipsToBounds = YES;
}