Всплывающее окно с заголовком TableView-Footer и AutoLayout не работает
Контекст:
У меня есть всплывающее окно, которое содержит таблицу. Мне бы хотелось, чтобы размер всплывающего окна был меньше, чем вся высота экрана, но хотелось бы, чтобы представление таблицы масштабировалось в соответствии с количеством строк. (Если табличное представление содержит 2 строки, оно будет соответствовать этим двум строкам и не будет прокручиваться; если табличное представление имеет 30 строк, оно будет максимально развернуто на высоте экрана и позволит прокручиваться).
Посмотреть иерархию:
- viewContainer (clear background, whole view)
-- viewPopUp (pop up container)
--- labelHeader
--- tableView
--- buttonOK
Ограничения:
viewPopUp.centerY = viewContainer.centerY
viewPopUp.centerX = viewContainer.centerX
viewPopUp.leadingSpaceTo superView = 32 @750
viewPopUp.trailingSpaceTo superView = 32 @750
viewPopUp.width <= 300
viewPopUp.height <= 0.8 * viewContainer.height
labelHeader.topSpaceTo superView = 0
labelHeader.leadingSpaceTo superView = 0
labelHeader.trailingSpaceTo superView = 0
labelHeader.bottomSpaceTo tableView = 0
labelHeader.height = 33
tableView.topSpaceTo labelHeader = 0
tableView.leadingSpaceTo superView = 0
tableView.trailingSpaceTo superView = 0
tableView.bottomSpaceTo buttonOk = 0
tableView.height >= 0
tableView.height = 0 @200
buttonOk.topSpaceTo tableView = 0
buttonOK.leadingSpaceTo superView = 0
buttonOK.trailingSpaceTo superView = 0
buttonOk.bottomSpaceTo superview = 0
buttonOK.height = 35
Мой вопрос:
В моем UIViewController's viewDidLoad
Я точно знаю, сколько строк должно быть представлено в этом tableView, и я хотел бы добавить дополнительное ограничение, чтобы иметь масштаб tableView для этого числа, как описано в контексте выше.
я пытался tableView.height = count * rowHeight @500
но это не обновляет представление. Я не уверен, если я не называю что-то вроде needsUpdateConstraints
или же needsUpdateLayout
и т.п.
Если я добавлю вышеупомянутое ограничение по мере необходимости, то он обновит tableView, как и ожидалось, но я получу предупреждения об ограничении, и я верю, что это сломается, если он вытолкнет tableView за размер экрана, поэтому я хотел добавить его как не обязательное ограничение, поэтому оно выпадет после достижения высоты экрана.
У кого-нибудь есть идеи, как мне достичь этого желаемого результата?
Спасибо!
1 ответ
Предполагая, что высота строк всегда одинакова, вы можете рассчитать высоту таблицы, сравнить ее с высотой представления и установить для этого значения ограничение по высоте, добавляемое в представление таблицы. Код будет выглядеть примерно так:
//calculate the height
var tableHeight = numberOfRows * rowHeight
if tableheight > maxHeight {
tableHeight = maxHeight
}
self.tableHeightConstraint.constant = tableHeight //this constraint should be a iboutlet
self.view.layoutIfNeeded()
Надеюсь, поможет.