Как динамически установить высоту UITextView в UITableViewCell в зависимости от размера строки? - PullRequest
0 голосов
/ 22 мая 2018

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

Вот изображение моего пользовательского UITableViewCell и всех его ограничений:

enter image description here

Каждый пост содержит эти элементы пользовательского интерфейса.Единственный элемент, который может изменить высоту каждой ячейки, - это messageView, поскольку его высота зависит от отображаемой строки.Вопрос в том, как мне динамически установить высоту каждой ячейки?Вот что у меня сейчас (НЕ работает, messageView вообще не отображается):

func cellForRowAt(indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(...) as! PostCell

    let message = ...
    cell.messageView.text = message

    return cell
}

func heightForRowAt(indexPath: IndexPath) -> CGFloat {
    var cellMinimumHeight: CGFloat = 120
    if let cell = tableView.cellForRow(at: indexPath) as? PostCell {
        let size = cell.messageView.sizeThatFits(cell.messageView.frame.size)
        cellMinimumHeight += size.height
    }

    return cellMinimumHeight
}

в функции heightForRowAt, if не выполняется, поэтому высота всех ячеекcellMinimumHeight = 120.

Как я могу сделать высоту каждой ячейки = 120 + высоту MessageView?

--------------------------------- РЕДАКТИРОВАТЬ 1 ---------------------------------

Ошибка на картинке, высота messageView не установлена ​​

Ответы [ 4 ]

0 голосов
/ 22 мая 2018

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

Форма яблока Документация

Чтобы определить высоту ячейки, вам нужна непрерывная цепочка ограничений и представлений (с определенной высотой)чтобы заполнить область между верхним краем представления контента и его нижним краем.

Итак, для вашего случая вам нужно

высота ячейки = 120 + высота сообщения:

Итак, начните с изображения профиля, чтобы измерить непрерывную цепочку ограничений сверху вниз

  1. Изображение профиля top = 10 + ImageHeight = 60 ----> 70

  2. MessageView top = 10 + установить минимальную высоту для сообщения, скажем, 20 в одну строку, если в каждой ячейке должно быть сообщение, даже если одно слово, и установить эту height больше илиравный 20 , убедитесь, что вы установили Scroll enable = false , поэтому сообщение Высота минимум = 10 сверху + 20 + 10 снизу ---> 40

  3. Меню Вид стека Высота ---> 30

Таким образом, для всех значений Total = 70 + 40 + 30 = 140 это высота по умолчанию, ни одна ячейка не будет меньше этой

Также необходимо установить для свойства rowHeight табличного представления значение UITableViewAutomaticDimension.Вы также должны присвоить значение свойству estimatedRowHeight

tableView.estimatedRowHeight = 130.0
tableView.rowHeight = UITableViewAutomaticDimension

Вот документация Apple Здесь

0 голосов
/ 22 мая 2018

Просто отключите прокрутку UITextview ... Но здесь нет использования UITextview, вы также можете использовать метку.

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

return UITableViewAutomaticDimension
0 голосов
/ 22 мая 2018

При использовании Auto-Layout для динамического определения размера ячеек вам не нужно реализовывать sizeThatFits(...).Если ограничения установлены правильно, то вам нужно только отключить прокрутку UITextView.

Из кода:

yourTextView.scrollEnabled = false

Из IB:

Выберите вашПросмотр текста и открытие Инспектор атрибутов , затем

enter image description here

0 голосов
/ 22 мая 2018

В инспекторе атрибутов выберите UITextView(messageView) и снимите флажок «Прокрутка включена».

И затем измените свой приоритет устойчивости к сжатию контента следующим образом: Горизонтальный = 750 Вертикальный = 1000

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...