ios使用约束来隐藏视图

时间:2018-09-16 18:36:45

标签: ios xcode nslayoutconstraint nslayoutanchor

为什么如果我有一个带有按钮的简单viewcontroller,一个“控件视图”和一个位于其下方的表格视图,那么我无法获得将表格视图扩展为涵盖“视图”的逻辑按下按钮,然后再按一次恢复。该表将覆盖“控件视图”,但是再次按下时,不会“还原”该表到“控件视图”下方

@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
        }
    }

3 个答案:

答案 0 :(得分:1)

您应该设置tableview的高度,并且tableview应该限制在顶部和底部垂直间距(如果要支持其他设备)。

初始设置为:

  • 高度常数大于0
  • 高度优先级为1000
  • 底部约束为0
  • 最低优先级为750

点击按钮时,只需更改优先级:

  • 高度优先级为750
  • 最低优先级为1000

答案 1 :(得分:1)

如果您的controlView的高度固定,

1)为故事板到controlView的{​​{1}}高度设置一个插座,并在需要隐藏它时将其设置为0。取消隐藏时设置另一个值。

不要忘记将 0 ViewController的底部空间设置为controlView,否则tableView不会覆盖您的tableView

答案 2 :(得分:1)

请注意以下代码:

myTableView.topAnchor.constraint(equalTo:myControlView.topAnchor).isActive = true
myTableView.topAnchor.constraint(equalTo: myControlView.bottomAnchor).isActive = true

每次调用myTableView.topAnchor.constraint都会添加一个新约束,这不是您想要的。

因此,请创建两个约束并将其保存到成员变量,然后根据需要激活或停用它。

顺便说一句,您不必每次单击按钮时都设置translatesAutoresizingMaskIntoConstraints,只需在xib或viewDidLoad中将其设置一次即可。