2017-01-19 2 views
0

Context:Popup View с Header-TableView-Footer и AutoLayout не работает

У меня есть всплывающее представление, содержащее TableView. Я бы хотел, чтобы всплывающее представление было меньше высоты экрана, но хотелось бы, чтобы tableview масштабировался с количеством строк, которые он имеет. (Если представление таблицы содержит 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-х viewDidLoad я точно знаю, сколько строк нужно будет р Представлено в этой таблицеView, и я хотел бы добавить дополнительное ограничение, чтобы шкала tableView была равна этому числу, как описано в приведенном выше контексте.

Я пробовал tableView.height = count * rowHeight @500, но это не обновляет вид. Я не уверен, если я не называю что-то вроде needsUpdateConstraints или needsUpdateLayout т.д.

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

Есть ли у кого-нибудь идеи о том, как я могу достичь этого желаемого результата?

Спасибо!

ответ

0

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

//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() 

Надеется, что это помогает.

Смежные вопросы