【问题标题】: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

任何帮助将不胜感激。

【问题讨论】:

  • 您需要更新高度。目前,您正在分配新的约束。检查这个:stackoverflow.com/a/49776158/14733292
  • 我试过它不起作用。只有当视图被隐藏时我没有给出任何高度时它才有效。

标签: swift view


【解决方案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】:

      您将创建的约束保留在视图控制器中并根据需要激活,使用NSLayoutConstraintisActive 属性:

      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        相关资源
        最近更新 更多