0

为什么如果我有一个带有按钮、“控制视图”和下面的表格视图的简单视图控制器,当按下按钮时,我无法获得将展开表格视图以覆盖“视图”的逻辑工作如果再次按下则恢复。该表格将覆盖“控制视图”,但当第二次按下时,不会“恢复”“控制视图”下方的表格

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

3 回答 3

1

您应该设置 tableview 的高度,并且 tableview 应该限制为顶部和底部的垂直间距(如果您想支持不同的设备)。

初始设置为:

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

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

  • 高度优先级为 750
  • 最低优先级是 1000
于 2018-09-16T19:15:47.820 回答
1

请注意以下代码:

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

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

所以请创建并保存这两个约束到成员变量中,然后根据您的需要激活或停用它。

顺便说一句,您不必每次单击按钮时都设置 translatesAutoresizingMaskIntoConstraints,在 xib 或 viewDidLoad 中设置一次

于 2018-09-17T07:58:28.590 回答
1

如果你controlView有固定的高度,

controlView1)为故事板到的高度制作一个出口,ViewController并在需要隐藏它时将其设置为0。取消隐藏时设置另一个值。

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

于 2018-09-17T05:11:47.037 回答