2010-09-15 2 views
8

Я подклассифицировал UITableViewCell для создания пользовательской ячейки с кнопкой и двумя ярлыками. Определение ячейки загружается из xib с использованием шаблона, описанного в Dave Mark's Beginning iPhone Development. Вот основной код:Не могу отступать Подкласс UITableViewCell

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; 
    } 

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

Любые подсказки?

ответ

21

Обновления для прошивки 8: Кода ниже уже не работает по какой-то причине

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

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

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

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

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

Для прошивки 7, это работает (но больше не рекомендуется)

на основе предложений vodkhang, я реализовал следующее решение в моем UITableViewCell sublass. Не уверен, что это лучшее решение, но, похоже, оно работает нормально.

- (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); 
} 
+0

Это прекрасно работает! – Nathan

+1

Это потрясающе для отступов просмотра контента - спасибо! Как насчет отступов самой ячейки? Я думал, что я удалю ContentView из вышеизложенного и посмотрю, не является ли indentationLevel 0, но это выглядит нехорошо. –

+3

выше код зависает на iOS8 – Gerry

1

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

0

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

Смежные вопросы