上下文:
我有一个包含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
,但这不会更新视图。我不确定我是不是在说needsUpdateConstraints
或needsUpdateLayout
等等。
如果我按需要添加上述约束,那么它将按预期更新tableView但我收到约束警告,我相信如果它推动tableView超过屏幕大小,这将会破坏这就是为什么我想将它添加为一个非必需的约束,因此它会在达到屏幕高度后下降。
有没有人对如何达到预期结果有任何想法?
谢谢!
答案 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()
希望它有所帮助。