如果我们的内部NSView
列具有动态高度,则使用autolayout调整superview大小的最佳做法是什么?
例如。如果我们有两个列布局,其中左列高度大于右列,则超视图高度应为右列高度。比如,如果我们将右栏高度改为大于左栏高,则超视高度应改为右栏的高度。如何做到这一点?
我制作了示例项目来测试这个:
.Bottom
的{{1}}约束附加到superview的底部。
NSView
按钮,我的右侧Make Right Bigger
的高度比左侧的高。
所以我想在这里使用superview根据较大的列(右列)更改高度。这样做有好的做法吗?
代码:
NSView
下载测试项目:GitHub
答案 0 :(得分:2)
管理只使用约束来完成此操作。只需为列添加容器视图,并将其高度设置为GreaterThanOrEqual
到左列和右列。
view.addConstraint(NSLayoutConstraint(item: containerView, attribute: .Height, relatedBy: .GreaterThanOrEqual, toItem: leftView, attribute: .Height, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: containerView, attribute: .Height, relatedBy: .GreaterThanOrEqual, toItem: rightView, attribute: .Height, multiplier: 1, constant: 0))
答案 1 :(得分:0)
首先在高度为
的superview上创建一个约束let heightConstraint = NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: greaterHeightAmongTwoColumns)
如评论中所述,您可以发布通知,然后让超级视图知道更新的帧。超级视图将检查两列中任何一列的更新高度是否大于其当前高度并更新上面声明的heightConstraint然后调用
[self layoutIfNeeded]
在superview的superview上,以便用新框架进行布局。