ios使用约束隐藏视图

Posted

技术标签:

【中文标题】ios使用约束隐藏视图【英文标题】:ios using constraints to hide a view 【发布时间】:2018-09-16 18:36:44 【问题描述】:

为什么如果我有一个带有按钮、“控制视图”和下面的表格视图的简单视图控制器,当按钮被按下,如果再次按下则恢复。该表格将覆盖“控制视图”,但当第二次按下时,不会“恢复”“控制视图”下方的表格

@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
        
    

【问题讨论】:

你在控制台中得到了什么吗?您是否在 View Debugger 中看到任何感叹号? 不,没有警告...看看目前剩下的 3 cmets... 【参考方案1】:

如果您的controlView 具有固定高度,

1) 为故事板到ViewControllercontrolView 高度创建一个出口,并在需要隐藏它时将其设置为0。取消隐藏时设置另一个值。

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

【讨论】:

【参考方案2】:

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

初始设置为:

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

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

身高优先级为750 最低优先级为 1000

【讨论】:

不确定您指的是什么约束。如果我创建按钮、控件视图和表格并定位它们,然后添加缺少的约束,您指的是高度和底部的哪些约束?【参考方案3】:

请注意以下代码:

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

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

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

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

【讨论】:

以上是关于ios使用约束隐藏视图的主要内容,如果未能解决你的问题,请参考以下文章

iOS 自动布局约束:忽略隐藏或零尺寸视图?

iOS 以编程方式生成的视图具有隐藏的约束,导致与自动布局发生冲突

具有等宽约束的 iOS 隐藏按钮

iOS Autolayout:如何显示/隐藏包含边距的视图?

启用自动布局的 iOS 调整视图大小

有没有办法隐藏ios中视图的特定部分?