Автоматическое изменение размера TableViewCell на основе содержимого не работает - PullRequest
1 голос
/ 04 мая 2019

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

У меня есть UITableViewController с одной ячейкой-прототипом.В этом есть представление пользовательского интерфейса, прикрепленное с 0 верхними, нижними, ведущими и конечными ограничениями.К этому представлению я добавил ImageView с фиксированной шириной и высотой, центрированный по виду и с верхними ограничениями.Кроме того, есть центрированная метка с верхним и нижним ограничениями.Таким образом, ограничения должны быть в порядке.

Кроме того, я добавил

tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 300

к viewDidLoad() из TableViewController.

Вместо получения ожидаемого результата

enter image description here

экран выглядит так:

enter image description here

ВотОграничения:

Here is the Constraints

Есть идеи, что здесь происходит?

РЕДАКТИРОВАТЬ: только для целей тестирования, я теперь создал новую ячейку прототипаи только добавил к нему метку, закрепив ее ограничениями «ведущий», «конечный», «верхний и нижний» и установив для ее свойства lines значение 0, чтобы включить автоматическое изменение размера.Однако опять ничего не происходит, ярлык даже не оборачивает текст внутри него.

Смотрите здесь раскадровку, ограничения и фактический результат: https://imgur.com/a/Hq5frWp

Код моего TableViewController:

import UIKit

class FirstTableViewController: UITableViewController{


    override func viewDidLoad() {

        super.viewDidLoad()

        tableView.rowHeight = UITableView.automaticDimension

        tableView.estimatedRowHeight = 300.0

    }


    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 1
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cellA = tableView.dequeueReusableCell(withIdentifier: "article", for: indexPath) as! ArticleTableViewCell
            cellA.articleText.text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus "
            return cellA

    }
}

Ответы [ 3 ]

0 голосов
/ 04 мая 2019

Насколько я вижу, ваши ограничения идеальны.

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

Сначала проверьте,Вы правильно использовали функцию tableView cellForRowAt.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        guard let cell = tableView.dequeueReusableCell(withIdentifier: "thatCellsIdentifier", for: indexPath) as? YourTableViewCell else{
            fatalError()
        }

        cell.label.text = "sample"
        cell.image.image = UIImage(named: "yourImage")
        return cell
    }

РЕДАКТИРОВАТЬ и теперь установите ее в viewDidLoad() вашего TableViewController

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300

или используйтеинспектор размера вашего TableViewController для его установки.

enter image description here (я сохранил оценочное значение как автоматическое на скриншоте, игнорируйте его)

0 голосов
/ 13 мая 2019

Просто удалил этот TableViewController и начал с нуля.Теперь все работает нормально ...

0 голосов
/ 04 мая 2019

Проверьте, устанавливаете ли вы начальное и конечное ограничение на метке для его superView, недостаточно только горизонтальное центральное ограничение.

[В качестве альтернативы, вы можете также выбрать фиксированную ширину без высоты на метке. Не устанавливайте высоту метки : см. Обновленный ответ ниже]

Также вы можете установить для numberOfLines на метке значение 0, если хотите, чтобы оно росло в зависимости от содержимого.

Вот так будет рассчитываться высота ярлыка.

Я попробовал небольшую демонстрацию, и она прекрасно работает для меня.

enter image description here

enter image description here

Обновление :

Не устанавливайте высоту на этикетке, так как она будет фиксировать ее высоту и не будет расти в зависимости от размерапо содержанию.

Как и полагает Ревант, достаточно ширины, поэтому вы можете установить ограничение «ширина» или «ведущий и конечный» для метки.

Но убедитесь, что его высота гибкаяи numberOfLines = 0 для его роста.

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