Высота ячеек таблицы не отображается

enter image description here

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

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

Ответ 1

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

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

enter image description here

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

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

Ответ 2

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

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

Ответ 3

Установите высоту строки, а также оценку высоты строки как Automatic в viewDidLoad() как

table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension

В heightForRowAt: задайте высоту как UITableViewAutomaticDimension as

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

Примечание. Задайте количество строк long restaurant name 0".

Ответ 4

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

  • Назначить и реализовать dataSource и делегировать
  • Назначить UITableViewAutomaticDimension для rowHeight & оценкамRowHeight
  • Внедрите методы delegate/dataSource (например, 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 (& режим разрыва строки = обрезать хвост)
  • Задайте все ограничения (сверху, снизу, справа налево) относительно контейнера супервизора/ячейки.
  • Необязательно: установите минимальную высоту для метки, если вы хотите, чтобы минимальная вертикальная область была покрыта меткой, даже если данных нет.

enter image description here

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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