ParentView包含ChildView1和ChildView2。这些 subview 具有不同的高度。
ChildView1 比 ChildView2 高。仅显示一个 subview ,例如,如果 ChildView1 可见,则 ChildView2 隐藏。 ChildView1 和 ChildView2 都使用自定义 XIB。
两个 subview “驱动”ParentView 的高度,即自动布局约束的连接使得 ParentView 与 ChildView1 或 ChildView2 一样高,并且不会更高。
问题是隐藏 ChildView1 并显示 ChildView2 不会“缩小”ParentView 以匹配 ChildView2 的高度。它保持在较高 subview ChildView1 的高度。
调用 sizeToFit()
和 setNeedsLayout()
不会改变任何事情。
当ChildView1隐藏时,如何强制ParentView匹配ChildView2的高度?
最佳答案
隐藏 View 仍然参与布局。除了隐藏隐藏 View 之外,您还需要停用对隐藏 View 的约束。
如果您的部署目标是 iOS 9 或更高版本,您可以将父级设置为 UIStackView
。堆栈 View 在布局期间自动忽略其隐藏的 subview 。
更新
您不需要单独的 channel 来应对所有限制。您只需要两个奥特莱斯系列。您可以将一个 socket 集合连接到多个对象。演示:
集合最终连接到 Storyboard中的多个对象:
然后您可以使用一个语句激活或停用一组约束:
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)
}
}
关于ios - 隐藏互斥 subview 后调整容器 UIView 的大小以匹配可见 subview 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877915/