UITableView внутри проблемы ограничения высоты UIStackView - PullRequest
0 голосов
/ 04 октября 2018

Требование:

Наше приложение имеет шаблон, в котором на многих экранах есть несколько UILabels вверху и один UITableView ниже, который, когда присутствует, всегда является последним элементом на странице и расширяется вправо донижняя часть экрана.Поскольку страницы зависят от пользовательских данных, мы не знаем заранее, сколько меток нам нужно отобразить.Кроме того, в некоторых случаях, когда нет данных для отображения в UITableView, мы просто хотим скрыть их.

Моя реализация (это не работает):

Из-за динамического характераНа этой странице я подумал, что обертывание всех UILabels и UITableView в UIStackView и последующее манипулирование видимостью элементов (т. е. свойством isHidden) в коде - это путь.Я прикрепил все углы UIStackView к углам SuperView, кроме нижнего ограничения, которое я сделал большим или равным нижнему ограничению UIStackView.Это было сделано для того, чтобы убедиться, что в случае, если UITableView скрыт, UIStackView не занимает весь экран, так как при этом он имеет тенденцию отображать метки в середине экрана.По сути, если UITableView виден, я хочу, чтобы UIStackView занимал всю страницу, иначе - только пространство, необходимое для отображения меток.

Проблемы:

Sample application that demonstrates the issue Height constraint issue

AutoLayout не может определить высоту UITableView.Я могу придумать два решения для этого:

  1. Измените нижнюю константу UIStackView на «Равно», а не «Больше, чем».Таким образом, однако, UIStackView всегда будет принимать всю высоту экрана, а не то, что мне нужно, когда UITableView скрыт.
  2. Вручную укажите ограничение высоты UITableView.Я не хочу этого делать, так как не знаю заранее, какой будет необходимая высота от верхней части TableView до нижней части экрана.Я думаю, что это не так сложно сделать в коде, но я надеялся на более элегантное решение.

Интересное наблюдение:

В отличие от UITableView, UILabels, похоже, не имеет той же проблемы с ограничениями по высоте, что и UITableView.Я не уверен на 100%, почему это так, но я предполагаю, что UILabels заранее знает их высоту (вероятно, через intrinsicContentSize ()), но UITableView не знает до времени выполнения?

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете объединить предложенные вами решения 1 и 2:

Установите нижнее ограничение StackView равным, а затем, если оно пустое, программно измените его на «большее или равное».

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

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