0

上下文

我有一个包含表格视图的弹出视图。我希望弹出视图小于屏幕的整个高度,但希望 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我确切地知道在这个 tableView 中需要表示多少行,我想添加一个额外的约束来让 tableView 缩放到这个数字,如上面的上下文中所述。

我已经尝试过tableView.height = count * rowHeight @500,但这不会更新视图。我不确定我是否没有调用类似needsUpdateConstraints或之类的东西needsUpdateLayout

如果我根据需要添加上述约束,那么它将按预期更新 tableView,但我会收到约束警告,我相信如果它将 tableView 推到屏幕大小之外,这将中断,这就是为什么我想将其添加为非所需的约束,因此它会在达到屏幕高度后下降。

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

谢谢!

4

1 回答 1

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

希望能帮助到你。

于 2017-01-19T17:29:09.327 回答