Cra*_*lot 1 storyboard xib ios autolayout nslayoutconstraint
ParentView包含ChildView1和ChildView2。这些子视图的高度不同。
ChildView1比ChildView2高。仅显示一个子视图,例如,如果ChildView1可见,则ChildView2隐藏。ChildView1和ChildView2都使用自定义XIB。
两个子视图都“驱动” ParentView的高度,也就是说,AutoLayout约束已连线,使得ParentView与ChildView1或ChildView2一样高,而没有更高。
问题是隐藏ChildView1并显示ChildView2不会“缩小” ParentView以匹配ChildView2的高度。它保持在较高的子视图ChildView1的高度。
调用sizeToFit()并setNeedsLayout()不会改变任何事情。
隐藏ChildView1时,如何强制ParentView匹配ChildView2的高度?
隐藏的视图仍参与布局。除了隐藏视图之外,还需要取消激活隐藏视图上的约束。
如果您的部署目标是iOS 9或更高版本,则可以将父级设置为UIStackView。堆栈视图在布局期间会自动忽略其隐藏的子级。
您不需要为所有约束设置单独的出口。您只需要两个插座集合。您可以将一个插座集合连接到多个对象。演示:
集合最终连接到情节提要中的多个对象:
然后,您可以使用一个语句来激活或停用一组约束:
class ViewController: UIViewController {
@IBOutlet var pinkConstraints: [NSLayoutConstraint]!
@IBOutlet var greenConstraints: [NSLayoutConstraint]!
func showPink() {
NSLayoutConstraint.deactivateConstraints(greenConstraints)
NSLayoutConstraint.activateConstraints(pinkConstraints)
}
func showGreen() {
NSLayoutConstraint.deactivateConstraints(pinkConstraints)
NSLayoutConstraint.activateConstraints(greenConstraints)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |