如何快速隐藏和取消隐藏具有高度的视图?
Posted
技术标签:
【中文标题】如何快速隐藏和取消隐藏具有高度的视图?【英文标题】:How to hide and unhide a view with height in swift? 【发布时间】:2021-01-23 08:30:20 【问题描述】:我正在尝试隐藏和取消隐藏视图。隐藏时其大小应为 0,未隐藏时应为 200 左右。我有两个视图控制器。当第一个控制器显示视图第一次被隐藏并且它的大小设置为 0 时,它会导航到其他控制器并从 textfeilds 中获取一些值并将它们显示在前一个控制器的 tableview 上。
现在,我可以第一次隐藏高度为 0 的视图,但是当我使用这些值时,视图仍然是隐藏的。
这是我目前尝试过的代码:
mainView.isHidden == true
mainView.heightAnchor.constraint(equalToConstant: CGFloat(0)).isActive = true
// when I get the values but this code doesn't work
mainView.isHidden == false
mainView.heightAnchor.constraint(equalToConstant: CGFloat(100)).isActive = true
任何帮助将不胜感激。
【问题讨论】:
您需要更新高度。目前,您正在分配新的约束。检查这个:***.com/a/49776158/14733292 我试过它不起作用。只有当视图被隐藏时我没有给出任何高度时它才有效。 【参考方案1】:class viewController: UIViewController
var height: NSLayoutConstraint!
override func viewDidLoad()
super.viewDidLoad()
height = mainView.heightAnch.constraint(equalToConstant: 0)
height.isActive = true
//handle change height
if mainView.isHidden == true
height.constant = 0
else
height.constant = 200
【讨论】:
【参考方案2】:你有两个选择。 第一种方法将标识符设置为高度约束
设置标识符:
然后使用以下代码查找并更改:
// first option
// find own constraint with indentifier
if let heightConstraint = self.myView.constraints.first(where: item -> Bool in
return item.identifier == "heightIdentifier"
)
// set any constant to constraint
heightConstraint.constant = 200.0 // for hidden
heightConstraint.constant = 0.0 // for hide
// any work
第二个选项:将 IBOutlet 设置为目标约束:
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
那就改直接简单:
// second option
// change constant direct
self.heightConstraint.constant = 200.0 // for hidden
self.heightConstraint.constant = 0.0 // for hide
// any work
【讨论】:
【参考方案3】:您将创建的约束保留在视图控制器中并根据需要激活,使用NSLayoutConstraint
的isActive
属性:
var hiddenHeightConstraint: NSLayoutConstraint?
var showingHeightConstraint: NSLayoutConstraint?
var isMainViewHidden: Bool = false
didSet
mainView.isHidden == isMainViewHidden
hiddenHeightConstraint?.isActive = isMainViewHidden
showingHeightConstraint?.isActive = !isMainViewHidden
// Don't forget to call layoutIfNeeded() when you messing with the constraints
view.layoutIfNeeded()
override func viewDidLoad()
super.viewDidLoad()
hiddenHeightConstraint = mainView.heightAnchor.constraint(equalToConstant: CGFloat(0))
showingHeightConstraint = mainView.heightAnchor.constraint(equalToConstant: CGFloat(100))
isMainViewHidden = false
【讨论】:
以上是关于如何快速隐藏和取消隐藏具有高度的视图?的主要内容,如果未能解决你的问题,请参考以下文章