2016-10-16 2 views
0

У меня есть tableView со статическими ячейками внутри. Одна ячейка содержит карту, UITextView и другие элементы управления:Как изменить heightForRowAtIndexPath так, чтобы он отрегулировал высоту в текстовом виде в нем, но также сохранил минимальную высоту, когда текстовое окно пуст?

enter image description here

Это TextView имеет следующие ограничения:

enter image description here

До сих пор я создал heightForRowAtIndexPath к статическому значению для этой ячейки :

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    if indexPath.row == 0 { 
     return 311; 
    } 
} 

, но затем, когда текст длиннее, t extview - вместо того, чтобы расти - содержит текст внутри, и пользователь должен прокручивать его. В основном это всегда высота 311. Я хочу изменить его, так что вся ячейка отрегулирует содержимое textView.

Я попытался изменить return 311 на return UITableViewAutomaticDimension, но тогда, когда текста нет, ячейка сжимается, а элементы управления справа не видны.

Итак, мой вопрос: как установить динамическую высоту для ячейки на основе текста внутри, но также сохранить минимальную высоту 311?

ответ

1

Если вы просто, отображающей текст и не редактируя его каким-либо образом. ould попробуйте использовать UILabel, и UITableViewAutomaticDeminsions будет работать так, как ожидалось, при условии, что ограничения будут правильно добавлены.

Что вы можете сделать, это добавить ограничение высоты в textView, а затем увеличить его размер в зависимости от размера получаемой строки. Конечно, вам также нужно вызвать layoutIfNeeded! UITableViewAutomaticDimensions должен заботиться обо всем остальном.

+0

Вам не нужно вручную изменять высоту ограничения. Ярлык автоматически имеет ограничение собственного размера при более низком приоритете (по умолчанию), которое установит его так высоко, как нужно, чтобы отобразить весь текст. – Jerry

+0

Я имел в виду, если он хочет использовать textView! В этом случае ему придется изменить высоту ограничения. UILabel будет изменять размер самостоятельно. – Rikh

+0

А, да, я читал это слишком быстро, извините. – Jerry

0

Я не полностью понимаю ваш вопрос, но, основываясь на том, что вы сказали, может быть, это работает:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if UITableViewAutomaticDimension > 311 { 
      return UITableViewAutomaticDimension 
    } 
    else { 
     return 311 
    } 
} 

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

+0

Я пробовал, но это не сработало ... Я добавил 'print (UITableViewAutomaticDimension) 'перед оператором if, и я получаю' -1' там, мне интересно, почему: | – user3766930

+0

Это странно, но в вашем вопросе вы сказали, что это сработало, по крайней мере, когда был текст? – Eric

+0

Возможно, добавление ответа @ Sahil помогает, поскольку он объяснял под своим вопросом – Eric

1

Добавить ограничение высоты в текстовом режиме> = минимальное значение (что было бы, если ячейка 311, а затем установить высоту ячейки в автоматический режим.

+0

В моем случае минимальное значение равно 95, я добавил ограничение 'Height> = 95', но тогда, когда текст огромен - это ограничение в основном остается на 95, а текстовое изображение внутри прокручивается. Что для меня странно, так это то, что в 'cellForRowAtIndexPath' я отключил прокрутку по элементу' cell.textView.scrollEnabled = false', но он все еще прокручивается – user3766930

+0

Правда ли, что вы только показываете текст?Если это так изменится на метку и используйте ограничение по высоте. – Jerry

+0

будет ли эта этикетка поддерживать несколько линий здесь? – user3766930

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