В iOS, в чем разница между добавлением subview в объект UITableViewCell "cell" и "cell.contentView"?

В следующем коде, если мы делаем [cell addSubview: someLabel] vs [cell.contentView addSubview: someLabel], они, похоже, работают одинаково. Есть ли какая-то разница в том или ином? (пользовательская ячейка в реальном коде добавляет UIImageView и UILabel) (UIView, с другой стороны, не имеет contentView, поэтому нам не нужно добавлять subview в его contentView. UITableViewCell - подкласс UIView кстати)

-(UITableViewCell *) tableView:(UITableView *) tableView 
                       cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = nil;

    if ([tableView isEqual:self.songsTableView]){

        static NSString *TableViewCellIdentifier = @"MyCells";

        cell = [tableView dequeueReusableCellWithIdentifier:TableViewCellIdentifier];

        if (cell == nil){
            cell = [[UITableViewCell alloc] 
                    initWithStyle:UITableViewCellStyleDefault
                    reuseIdentifier:TableViewCellIdentifier];
        }

        // ...  some code to create a UILabel (not shown here)

        [cell addSubview: someLabel];  // vs using [cell.contentView addSubView: ...]

Ответ 1

Я считаю, что если я не ошибаюсь, contentView является подпунктом UITableViewCell.

Если вы посмотрите на эту страницу здесь, вы можете увидеть, что на самом деле есть 3 подпрограммы в UITableViewCell

Я думаю, что по умолчанию элемент управления редактированием скрыт до тех пор, пока вы не войдете в режим редактирования для таблицы, и в этом случае появится элемент редактирования (кнопка минус слева от каждой строки), а ваш контент-просмотр будет изменен и сдвинут вправо. Вероятно, это то, что дает эффект "правильной анимации", упомянутый другим ответом.

Чтобы протестировать разницу, попробуйте добавить поднаблюдение, такое как UILabel с текстом, в ячейку, а не в cell.contentView. Когда вы добавляете его в ячейку, а не в cell.contentView, и вы входите в режим редактирования для своей таблицы, я считаю, что ваш UILabel не будет изменять размер, вы увидите кнопку редактирования ontop/ниже знака "минус".

Ответ 2

Размещение ваших просмотров в contentView влияет на правильную анимацию в режиме и из режима редактирования. Поместите все свои подпрограммы в contentView, если вы не являетесь подклассом, и это должно быть в большинстве случаев, если вы не знаете, что делаете.