2013-10-28 3 views
1

Я загружаю табличный вид, где каждая ячейка таблицы имеет некоторый левый отступ (мыслить потоки сообщений/ответы), а также содержит ярлык с динамической высотой (содержимое ответа). Я использую AutoLayout, поэтому размеры UILabel. Для реализации отступа для каждого UITableViewCell я следовал советам людей здесь на SO, чтобы переопределить layoutSubviews для моего UITableViewCell так это выглядит следующим образом:Отступы UITableViewCell с динамической высотой UILabel

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

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

Если удалить этот отступ и комментарий моего переопределения layoutSubviews или если я ставлю вызов [super layoutSubviews] в конце, а не в начале, текст больше не отсечение, но я теряю отступ.

Я хочу, чтобы мой UITableViewCell был соответствующим образом отступом и для моей динамической UILabel распознал новый размер кадра и рисовал без какого-либо обрезания. Я пробовал звонить в layoutIfNeeded в разных местах для моего UILabel без успеха.

ответ

0

Вам нужно будет рассчитать размер UILabel спереди с помощью:

CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping]; 

использование, которое по размеру вашей ячейки. Может быть, лучше сделать это в Tableview источника данных heightForRowAtIndexPath

+0

Hi railparade, проблема с отключением текста на самом деле не связана с размером ячейки. Я могу установить размер ячейки до 1000, и текст UILabel будет по-прежнему резко отсечен. – Neil

+0

@Neil. У вас есть ограничения на верхнюю и нижнюю часть ячейки для UILabel, чтобы она расширялась с помощью ячейки? Кроме того, у вас есть numberOfLines, установленный в 0? – rdelmar

0

Оказывается, эта проблема имеет ту же причину, что и следующий пост переполнением стека: UILabel not wrapping text correctly sometimes (auto layout)

Использование принятого решения этой задачи (установка preferredMaxLayoutWidth в layoutSubViews) разрешен этот вопрос для меня.

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