Невозможно установить clipToBounds в UITableViewCell contentView в iOS 7.1

Редизайн 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] работает, но это еще одно слабое решение.

Кто-нибудь знает, почему это изменение было сделано и более надежное решение?

Ответы

Ответ 1

Как уже говорилось в комментариях, единственным решением в iOS7.1 является установка clipsToBounds в самой ячейке.

Ответ 2

Это довольно раздражает. То, что я сделал, - это добавить UIView в contentView с одинаковым размером (и авторезисткой маска по ширине), добавить соответствующий контент в это представление и установить для него клипы для него.

Ответ 3

Я ударил по какой-то проблеме, и я решил эту запутанную проблему уродливо. Наконец,

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

Ответ 4

В iOS 8 проверка ячейки "Подвижность клипов" в XIB не сработала.

Что такое работа:

- (void)awakeFromNib {
    [super awakeFromNib];

    // Initialization code
    self.clipsToBounds = YES;
}