2017-01-19 27 views
0

語境彈出查看與頁眉的TableView頁腳和自動版式不工作

我有一個彈出查看包含的tableview。我希望彈出視圖小於屏幕的整個高度,但希望tableview根據行數進行縮放。 (如果表視圖包含2行,那麼它將適合這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我知道到底有多少行將需要[R在這個tableView中呈現,我想添加一個額外的約束,讓tableView按照上面的描述縮放到這個數字。

我試過tableView.height = count * rowHeight @500但這並沒有更新視圖。我不知道如果我不打電話像needsUpdateConstraintsneedsUpdateLayout

如果我根據需要添加上述約束,然後它會更新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() 

希望它有幫助。