这是UITableViewCell
内部的结构,当用户从右向左滑动view1
移动和view2
&用户可以看到view3
,因为view1
覆盖了view2
& view3
。
我正试图崩溃&展开view2
&当view3
移动但view1
&的最大宽度时,view2
view3
应为50.如何使用auto layouts
?
答案 0 :(得分:2)
您可以通过为view2&分配宽度约束来实现这一点。在XiB中的view3或layoutSubiews(如果在代码中),最初为两个视图设置宽度约束为0,然后当用户滑动为每个视图设置为50并重新布局时
self.view2WidthCon.constant = 50
self.view3WidthCon.constant = 50
UIView.animate(withDuration: 0.25,animations:
{
self.view.layoutIfNeeded()
})
答案 1 :(得分:0)
如果view2
和view3
包含子视图,则将其宽度设置为0
可能会破坏其子视图约束,从而导致错误。
这是UIStackView
的理想用例。将所有三个视图(view1
,view2
和view3
)放在水平UIStackView
内。默认情况下,将视图2和3设置为隐藏。当用户向左滑动时,只需显示视图2和3(view2.isHidden = false
和view3.isHidden = false
)。
这种方法的优点是,如果视图2和3具有自动布局的子视图,则在隐藏/显示视图时它们不会被破坏。
要添加动画,只需将其放入动画块:
UIView.animateWithDuration(0.3){
view2.hidden = false // or true
view3.hidden = false // or true
}