Табличное представление высоты строки ячейки не работает

введите описание изображения здесь

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

Не могли бы вы сказать мне, что здесь пошло не так?


person Agung Laksana    schedule 02.10.2017    source источник
comment
с высотой проблем не возникает, вы также установили высоту из метода делегата в коде? Если это так, удалите этот метод.   -  person Tushar Sharma    schedule 02.10.2017
comment
какой у вас номер строки этикетки? он должен быть 0, а как насчет вашего набора ограничений? не могли бы вы поделиться с этим, с другой стороны, вы установили высоту представления динамической таблицы ограничений?   -  person Nazmul Hasan    schedule 02.10.2017
comment
Вы можете проверить мой ответ, надеюсь, это поможет вам stackoverflow.com/a/36574334/1776470   -  person iVarun    schedule 02.10.2017


Ответы (8)


В Xcode 9 tableview автоматически создает оценочные ячейки на основе Autolayout. Поскольку вы не предоставили автомакет, вот почему вы его получаете.

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

введите описание изображения здесь

Дайте значение, которое вы хотите для высоты строки, и ячейка будет создана соответствующим образом.

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

person Irfan    schedule 02.10.2017
comment
Что я могу сделать, если у меня есть разные типы ячеек прототипа с разной высотой? - person findusl; 24.01.2019

Добавьте этот код в свой UITableViewDelegate.

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100
}
person Leo    schedule 02.10.2017
comment
Нет, не делайте этого. Если все строки имеют одинаковую высоту, лучше просто установить свойство rowHeight табличного представления один раз в viewDidLoad. Реализуйте этот метод делегата только в том случае, если разные строки имеют разную высоту. - person rmaddy; 02.10.2017
comment
@rmaddy Согласно документу Apple, делегат имеет лучшую производительность, чем свойство. - person dahiya_boy; 02.10.2017
comment
@dahiya_boy Вы неправильно прочитали документацию. В документации для UITableView rowHeight и UITableViewDelegate heightForRowAt четко указано, что метод делегата является проблемой производительности. Гораздо эффективнее установить свойство rowHeight, чем использовать метод делегата, предполагая, что все строки имеют одинаковую высоту. - person rmaddy; 02.10.2017

Установите высоту строки, а также предполагаемую высоту строки как Автоматически в viewDidLoad() как

table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension

В heightForRowAt: установите высоту как UITableViewAutomaticDimension как

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

Примечание. Установите количество строк метки long restaurant name равным 0.

person luckyShubhra    schedule 23.10.2017

Убедитесь, что следующие шаги позволяют сделать автоматическое измерение эффективным для макета высоты ячейки/строки. (Вот пример кода для UILabel и как установить конкретную высоту содержимого для ячейки таблицы.)

  • Назначить и внедрить источник данных и делегировать
  • Назначьте UITableViewAutomaticDimension для rowHeight и предполагаемойRowHeight
  • Реализовать методы делегата/источника данных (т.е. heightForRowAt и вернуть ему значение UITableViewAutomaticDimension)

-

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Don't forget to set dataSource and delegate for table
    table.dataSource = self
    table.delegate = self

    // Set automatic dimensions for row height
    // Swift 4.2 onwards
    table.rowHeight = UITableView.automaticDimension
    table.estimatedRowHeight = UITableView.automaticDimension


    // Swift 4.1 and below
    table.rowHeight = UITableViewAutomaticDimension
    table.estimatedRowHeight = UITableViewAutomaticDimension

}



// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    // Swift 4.2 onwards
    return UITableView.automaticDimension

    // Swift 4.1 and below
    return UITableViewAutomaticDimension
}

Для экземпляра метки в UITableviewCell

  • Установить количество строк = 0 (и режим разрыва строки = обрезать конец)
  • Установите все ограничения (сверху, снизу, справа и слева) в отношении его контейнера superview/cell.
  • Необязательно: установите минимальную высоту для метки, если вы хотите, чтобы метка покрывала минимальную площадь по вертикали, даже если данных нет.

введите здесь описание изображения

person Krunal    schedule 23.10.2017

Вы можете сделать это вручную в своем tableviewdelegate:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100
}
person ganski    schedule 17.06.2019

  1. Установите количество строк на 0
  2. Установлен
   yourTableView.rowHeight = UITableView.automaticDimension and 
   yourTableView.estimatedRowHeight =  UITableView.automaticDimension
  1. вернуть UITableView.automaticDimension в метод делегата tableView(_:heightForRowAt:)

  2. Установить все ограничения. Нижнее ограничение важно для увеличения высоты ячейки табличного представления.

Все готово к работе

person Abhishek Binniwale    schedule 22.01.2020

Если вы хотите, чтобы ячейки занимали место в соответствии с их содержимым, вам нужно вернуть UITableViewAutomaticDimension в методах делегата табличного представления heightForRowAt: и estimatedHeightForRowAt:

person Mansi    schedule 02.10.2017
comment
вы также можете использовать: yourTable.rowHeight = UITableViewAutomaticDimension yourTable.estimatedRowHeight = UITableViewAutomaticDimension - person Mansi; 02.10.2017

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

Вкратце, что я сделал: (добавление и изменение ограничений — это две самые правые кнопки внизу справа от вида раскадровки) я сначала выбрал все представления в ячейке прототипа, удалил все ограничения (на самой правой кнопке есть хорошая опция), затем добавил все отсутствующие ограничения (еще один приятный вариант), и, наконец, я выбрал вторую кнопку справа и щелкнул все красные линии. Вы можете сделать это, выбрав все представления одновременно. И тогда это сработало.

person findusl    schedule 24.01.2019