2016-09-24 4 views
0

В моей доске объявлений у меня есть UITableView с динамически генерируемым UITableViewCell. Каждая ячейка содержит 2 метки и 1 вид текста:Как настроить высоту UITableViewCell на содержимое UITextView внутри?

enter image description here

У меня есть код, который настроить размер текстового поля, чтобы количество текста:

let fixedWidth = cell.myComment.frame.size.width 
cell.myComment.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
let newSize = cell.myComment.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
var newFrame = cell.myComment.frame 
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
cell.myComment.frame = newFrame; 

и она отлично работает, когда я установить фоновый цвет моей TextView на красный я вижу:

enter image description here

и сама клетка - я устанавливаю си зе здесь:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    if indexPath.row == 0 { 
     return 100//this is my static cell 
    } 
    else { 
     return 117; //for now it's hardcoded - how can I set this value dynamically based on content? 
    } 
} 

Так как я писал в комментарии выше - как я могу установить высоту ячейки динамически в зависимости от количества текста в текстовом виде?

ответ

3

Ключ к получению клеток самостоятельно проклейки таблицы (autolayout основе, который я рекомендую) выглядит следующим образом:

  • Добавьте подвидов к contentView из UITableViewCell
  • Предоставлять ограничений между вашими подвидов и contentView, так что ваши подвидности достигают всех краев ячейки таблицы. В вашем случае это, вероятно, означает выравнивание leading, trailing, top и bottom краев вашего UITextView с соответствующими краями contentView.
  • Установите высоту строки до UITableViewAutomaticDimension вместо жесткого кода CGFloat.
  • Где-то в вашем контроллере дайте оценку высоты с помощью tableView.estimatedRowHeight = x (жесткая кодированная константа в порядке, это для производительности).
+0

Хм, поэтому при этом мне все еще нужна часть кода, ответственного за настройку высоты текстового вида? – user3766930

+0

Нет. Пока вы ограничиваете края, UITextView достаточно умен, чтобы обернуть текст во вторую строку. Он, как и 'UILabel', имеет собственный размер содержимого, основанный на его тексте. – Connor

+0

спасибо, человек, работает как шарм :) – user3766930

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