ios 使用约束隐藏视图
ios using constraints to hide a view
为什么如果我有一个带有按钮的简单 viewcontroller,下方有一个 "control view" 和一个 table 视图,我无法使逻辑正常工作将在按下按钮时展开 table 视图以覆盖 "view",然后在再次按下时恢复。 table 将覆盖 "control view" 但是当第二次按下时, "restore" table 不会位于 "control view"
下方
@IBAction func buttonPressed(_ sender: Any) {
if bControlHide == false {
myTableView.translatesAutoresizingMaskIntoConstraints = false
myControlView.translatesAutoresizingMaskIntoConstraints = false
myTableView.topAnchor.constraint(
equalTo: myControlView.topAnchor).isActive = true
bControlHide = true
}
else {
bControlHide = false
myTableView.translatesAutoresizingMaskIntoConstraints = false
myControlView.translatesAutoresizingMaskIntoConstraints = false
myTableView.topAnchor.constraint(
equalTo: myControlView.bottomAnchor).isActive = true
}
}
您应该设置 tableview 的高度,并且 tableview 应该限制为顶部和底部的垂直间距(如果您想支持不同的设备)。
初始设置为:
- 高度常量大于0
- 高度优先级为1000
- 底部约束为 0
- 底部优先级为 750
当您点击按钮时,您只需更改优先级:
- 身高优先级为750
- 底部优先级为 1000
如果你的controlView
有固定高度,
1) 为storyboard的controlView
高度做一个outlet到ViewController
,需要隐藏的时候设置为0。取消隐藏时设置另一个值。
别忘了把0controlView
底部space设为tableView
,否则tableView
不会覆盖你的controlView
.
请关注以下代码:
myTableView.topAnchor.constraint(equalTo:myControlView.topAnchor).isActive = true
myTableView.topAnchor.constraint(equalTo: myControlView.bottomAnchor).isActive = true
每次调用myTableView.topAnchor.constraint都会添加一个新的约束,这不是你想要的。
所以请创建并保存这两个约束到成员变量中,然后根据需要激活或取消激活。
顺便说一句,您不必每次单击按钮时都设置 translatesAutoresizingMaskIntoConstraints,在 xib 或 viewDidLoad 中设置一次即可
为什么如果我有一个带有按钮的简单 viewcontroller,下方有一个 "control view" 和一个 table 视图,我无法使逻辑正常工作将在按下按钮时展开 table 视图以覆盖 "view",然后在再次按下时恢复。 table 将覆盖 "control view" 但是当第二次按下时, "restore" table 不会位于 "control view"
下方@IBAction func buttonPressed(_ sender: Any) {
if bControlHide == false {
myTableView.translatesAutoresizingMaskIntoConstraints = false
myControlView.translatesAutoresizingMaskIntoConstraints = false
myTableView.topAnchor.constraint(
equalTo: myControlView.topAnchor).isActive = true
bControlHide = true
}
else {
bControlHide = false
myTableView.translatesAutoresizingMaskIntoConstraints = false
myControlView.translatesAutoresizingMaskIntoConstraints = false
myTableView.topAnchor.constraint(
equalTo: myControlView.bottomAnchor).isActive = true
}
}
您应该设置 tableview 的高度,并且 tableview 应该限制为顶部和底部的垂直间距(如果您想支持不同的设备)。
初始设置为:
- 高度常量大于0
- 高度优先级为1000
- 底部约束为 0
- 底部优先级为 750
当您点击按钮时,您只需更改优先级:
- 身高优先级为750
- 底部优先级为 1000
如果你的controlView
有固定高度,
1) 为storyboard的controlView
高度做一个outlet到ViewController
,需要隐藏的时候设置为0。取消隐藏时设置另一个值。
别忘了把0controlView
底部space设为tableView
,否则tableView
不会覆盖你的controlView
.
请关注以下代码:
myTableView.topAnchor.constraint(equalTo:myControlView.topAnchor).isActive = true
myTableView.topAnchor.constraint(equalTo: myControlView.bottomAnchor).isActive = true
每次调用myTableView.topAnchor.constraint都会添加一个新的约束,这不是你想要的。
所以请创建并保存这两个约束到成员变量中,然后根据需要激活或取消激活。
顺便说一句,您不必每次单击按钮时都设置 translatesAutoresizingMaskIntoConstraints,在 xib 或 viewDidLoad 中设置一次即可