Не могу сделать отступ для подкласса UITableViewCell - PullRequest
8 голосов
/ 15 сентября 2010

Я создал подкласс UITableViewCell для создания пользовательской ячейки с кнопкой и 2 метками. Определение ячейки загружается из xib с использованием шаблона, описанного в «Начальной разработке iPhone» Дейва Марка. Вот необходимый код:

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MarketItemCustomCell" owner:self options:nil];

    for (id oneObject in nib)
    {
        if ([oneObject isKindOfClass:[MarketItemCustomCell class]])
        {
            cell = (MarketItemCustomCell *)oneObject;
            break;
        }
    }

Надписи и кнопки отображаются должным образом, но уровень отступа не учитывается. Я реализовал indentationLevelForRowAtIndexPath, как показано ниже, но ячейка все еще выровнена полностью влево.

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        <snip/>
        return 5;
    }

Обратите внимание, что уровень отступа работает нормально, когда я не использую пользовательскую ячейку.

Есть подсказки?

Ответы [ 3 ]

21 голосов
/ 16 сентября 2010

Обновление для iOS 8: Приведенный ниже код больше не работает по какой-то причине

Альтернативное предложение для iOS 8:

Рассмотрите возможность созданияОграничение AutoLayout для представления отступа левого поля

Во время выполнения измените это ограничение, чтобы изменить уровень отступа

Если у вас есть пользовательский подкласс UITableViewCell, этот подкласс может иметь IBOutlet, сопоставленный с ограничением.(К сожалению, Apple не предоставила функцию findConstraintByTag / Id)

Свойство «константа» NSLayoutConstraint с иронией может быть изменено для изменения уровня отступа.

Для iOS 7:это работает (но больше не рекомендуется)

Основываясь на предложении Водханга, я реализовал следующее решение в своем подклассе UITableViewCell.Не уверен, что это лучшее решение, но оно работает нормально.

- (void)layoutSubviews
{
    [super layoutSubviews];

    float indentPoints = self.indentationLevel * self.indentationWidth;

    self.contentView.frame = CGRectMake(indentPoints,
                                          self.contentView.frame.origin.y,
                                          self.contentView.frame.size.width - indentPoints, 
                                          self.contentView.frame.size.height);
}
1 голос
/ 15 сентября 2010

Я думаю, что вам нужно настроить уровень отступа в вашем пользовательском UITableViewCell.Я предполагаю, что этот метод (и такие методы, как – tableView:heightForRowAtIndexPath:) не повлияет на UITableViewCell, если ваш пользовательский UITableViewCell уже указал его

0 голосов
/ 09 мая 2011

Если вы создадите UITableViewCell в xib, вы будете использовать свойство ячейки customView, которое не использует отступы автоматически. Вы можете создать подкласс UITableViewCell и реализовать layoutSubviews, чтобы изменить свой фрейм на основе отступа, или вы можете делать то же самое, где бы вы ни настраивали свои ячейки в делегате таблицы или источнике данных. Я хотел бы, чтобы Apple реализовала отступ для пользовательских ячеек.

...