2016-09-14 3 views
2

У меня есть UIStackView, где он может отображать метку, изображение, представление таблицы или ничего, основанное на выборе пользователя. Вот моя текущая иерархия для динамического представления:UITableView не показан внутри UIStackView

  • UIStackView_Parent
    • UILabel - некоторый текст, фиксированный вид
    • UIStackView_Child - это контейнер, который может показать несколько вещей или ничего
    • UIView - другой фиксированный вид

Когда я называю UIStackView_Child.addArrangedSubview(...) с ярлыком или изображением он отлично работает, но addArrangedSubview(tableView) не показывает таблицу. У меня есть tableView.scrollEnabled = false и установите рамку на фиксированную высоту в зависимости от количества ячеек и определите таблицу cellHeight.

Любая помощь будет очень признательна, спасибо!

ответ

1

Это потому, что stackview пытается максимально сжимать контент. Когда вы начинаете добавлять табличное представление, я предполагаю, что у него нет содержимого, поэтому stackview сжимает ширину до 0, потому что ему нечего показывать. Вы должны сделать одну из двух вещей:

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

let estimatedHeight = tableView.numberOfRows(inSection: 0) //You may need to modify as necessary 
let width = parentView.frame.size.width 
tableView.frame = CGRect(x: 0, y: 0, width: width, height: estimatedHeight) 

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

+4

«Вам нужно сделать одну из двух вещей», что еще? – Honey

1

Другой способ сделать это без явной установки высоты и ширины рамки - это встроить вид в таблицу в пустой вид, прикрепить табличный вид сверху, снизу, слева и справа и установить значение «больше или равно» msgstr "ограничение высоты таблицы.