Всплывающее окно с заголовком 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()

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

Другие вопросы по тегам