2016-02-01 2 views
0

Последовало this tutorial для создания динамической высоты UITableViewCell.Изменение высоты динамической высоты UITableViewCell после того, как оно уже появилось

В моей прототипной ячейке есть 1 ярлык (довольно простой). Эта метка имеет ограничения, установленные на «0» для всех сторон краев ячейки. Эта метка имеет numberOfLines = 0 и обертывает слово.

В моей установке UITableView, я делаю это:

self.tableView.rowHeight = UITableViewAutomaticDimension 
    self.tableView.estimatedRowHeight = 100.0 //some random number 

В принципе, все работает. Каждая ячейка имеет свою собственную высоту.

Проблема возникает, когда я обновляю эту метку с другим текстом. Высота ячейки остается неизменной, и текст просто усекает ИЛИ появляется пробел.

Есть ли способ сообщить ячейке «перерисовать», чтобы он снова вычислял высоту?

В идеале, я хотел бы сделать это внутри класса UITableViewCell, так как там он получает уведомление об обновлении текста метки.

ответ

1

Вам необходимо внести estimatedHeightForRowAtIndexPath и рассчитать размер этикетки.

, например:

override func tableView(tableView: UITableView, 
         estimatedHeightForRowAtIndexPath 
         indexPath: NSIndexPath) -> CGFloat { 
    let model = YourModelArray[indexPath.row] 
    // Label fontName and size 
    let attributes = [ 
      NSFontAttributeName : UIFont(name: "FontName-Regular", size: 16) as! AnyObject] 
    let nsStringText = model.text as! NSString 
    // Calculate the size here 
    //--------------------// 
    //--10--UILabel--10--// 
    //-----Element------// 
    //------------------// 
    let size = nsStringText. 
        boundingRectWithSize(CGSize(width: self.tableView.frame.width - 20, 
        height: 1000), 
        options:[NSStringDrawingOptions.UsesLineFragmentOrigin, 
          NSStringDrawingOptions.UsesFontLeading], 
          attributes: attributes, context: nil) 
    // Basically add other elements heights and vertical Spacing between them 
    return size.height + element.frame.height + verticalSpacingBetweenLabelAndElement 
} 
+0

Как я это называю, хотя? (Когда моя ячейка получает сообщение центра уведомлений, ему нужно вызвать что-то, чтобы «изменить размер» своей собственной высоты) – TIMEX

+0

просто реализовать метод menthionned и вызвать tableView.reloadData() – Coyote

+0

Могу ли я перезагрузить только ячейку, а не всю таблицу? – TIMEX

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