带有Header-TableView-Footer和AutoLayout不工作的弹出视图

时间:2017-01-19 16:47:35

标签: ios objective-c uitableview autolayout flkautolayout

上下文

我有一个包含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&#39; viewDidLoad中我确切地知道需要在这个tableView中表示多少行,我想添加一个额外的约束来使tableView缩放到这个数字,如上面的背景。

我尝试过tableView.height = count * rowHeight @500,但这不会更新视图。我不确定我是不是在说needsUpdateConstraintsneedsUpdateLayout等等。

如果我按需要添加上述约束,那么它将按预期更新tableView但我收到约束警告,我相信如果它推动tableView超过屏幕大小,这将会破坏这就是为什么我想将它添加为一个非必需的约束,因此它会在达到屏幕高度后下降。

有没有人对如何达到预期结果有任何想法?

谢谢!

1 个答案:

答案 0 :(得分: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()

希望它有所帮助。