前言:我看了一眼this post,它并没有解决我的问题。这是一个link to a repo,显示我遇到的错误。隐藏嵌套UISTackviews的UIStackView
我有一个UIViewController
垂直UIStackView
包含嵌套水平UIStackViews
。
有两个UIStackViews
是切换。如果显示UIStackViewNumber1
,则UIStackViewNumber2
隐藏&反之亦然。我最初设置的视图显示,但它太拥挤。
UIStackView
stackViewThatDoesntMove
stackViewNumber1
stackViewNumber2
stackViewThatDoesntMove
如果我不隐藏任何东西,一切正常,没有AutoLayout错误。在UIStackViews
的每一个嵌套了包含按钮,标签,滑块,等我发现的观点是太拥挤stackViews,所以我想我会设置隐藏stackViews之一和动画的变化,具体如下:
stackViewNumber2.isHidden = true
UIView.animate(withDuration: 0.33,
options: [.curveEaseOut],
animations: {
self.stackViewNumber1.layoutIfNeeded()
self.stackViewNumber2.layoutIfNeeded()
self.view.layoutIfNeeded()
},
completion: nil)
}
虽然我在Simulator和物理设备上获得了期望的结果,但是当我隐藏其中一个UIStackViews时,我的控制台填满了AutoLayout错误。
我看了一下this post,我的问题看起来很简单。我采用最少的“簿记”方法,并在UIView
中包装stackViewNumber2
。我最终得到的是我原来没有将stackViewNumber1
包含在UIView
中的一组错误。
我也看了Apple's documentation on UIStackView
并试图玩弄的arrangedSubviews()设置的限制isActive = false
,如下:
for subview in stackViewNumber2.arrangedSubviews {
for constraint in subview.constraints {
constraint.isActive = false
}
}
stackViewNumber2.updateConstraints()
// then run animation block to update view
是否有隐藏嵌套UIStackViews
而不用追加用于约束的IBOutlet
更有效的方式,使确定它不弱,并且对isActive
是否为true
/false
做记录?
我认为我的问题与嵌套stackViews有关,但我无法弄清楚如何解决它。感谢您的阅读,我欢迎有关如何隐藏包含嵌套UIStackViews
的UIStackView
的建议。
更改动画块内的隐藏属性是否有任何不同的效果。如果需要,离开布局? – agibson007
@ agibson007感谢您的阅读。不,它没有任何不同的效果。 – Adrian
嵌套stackviews包含什么?他们是否在评估内容大小,还是在设定内容?另外什么是设置垂直持有水平。试图描绘它,以及可能会有什么阻碍。而不是取消激活约束,而不是隐藏内部堆栈视图如果在动画块中隐藏这些堆栈视图的子视图会发生什么情况。 – agibson007