【问题标题】:Setting UITextField heightAnchor to 0 does not work on iOS 15将 UITextField heightAnchor 设置为 0 在 iOS 15 上不起作用
【发布时间】:2021-11-22 21:05:43
【问题描述】:

我有一个 iOS 应用程序,其中有一个文本字段和一个按钮,点击按钮我必须隐藏文本字段。

我在点击按钮时将 heightAnchor 设置为 0。在 iOS 14(14.5) 上一切正常,但在 iOS 15 上不起作用(不隐藏文本字段)。另外,我尝试在 UITextField 上设置 isHidden 属性,但它不起作用。

请您帮忙判断是否发生了变化或我做错了什么。谢谢。

代码参考:

import UIKit

class ViewController: UIViewController {

  private lazy var mytextFeild: UITextField = {
    let textField = UITextField()
    textField.translatesAutoresizingMaskIntoConstraints = false
    textField.text = "Hello world"
    textField.backgroundColor = .green
    return textField
  }()
   
  private lazy var testView: UIView = {
    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.backgroundColor = .systemPink
    return view
  }()
   
  private lazy var button: UIButton = {
    let view = UIButton()
    view.backgroundColor = .blue
    view.setTitle("hide it", for: .normal)
    view.translatesAutoresizingMaskIntoConstraints = false
     
    view.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    return view
  }()
   
  var heightConstraint: NSLayoutConstraint?
   
  @objc func buttonTapped() {
    heightConstraint?.isActive = false
    heightConstraint = mytextFeild.heightAnchor.constraint(equalToConstant: 0)
    heightConstraint?.isActive = true
  }

  override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(mytextFeild)
    view.addSubview(testView)
    view.addSubview(button)
     
    mytextFeild.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 32).isActive = true
    mytextFeild.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -32.0).isActive = true
    mytextFeild.topAnchor.constraint(equalTo: view.topAnchor, constant: 64).isActive = true
    heightConstraint = mytextFeild.heightAnchor.constraint(equalToConstant: 32.0)
    heightConstraint?.isActive = true
    button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 32.0).isActive = true
    button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -32.0).isActive = true
    button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
    button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -64.0).isActive = true
     
    testView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    testView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    testView.topAnchor.constraint(equalTo: mytextFeild.bottomAnchor).isActive = true
    testView.bottomAnchor.constraint(equalTo: button.topAnchor).isActive = true
  }
}

【问题讨论】:

    标签: ios uitextfield ios15


    【解决方案1】:

    将它们添加到堆栈中,然后将堆栈添加到 viewController。最后尝试在不改变高度的情况下轻松隐藏它。

    class ViewController: UIViewController {
    
        private lazy var stackView: UIStackView = {
            let stackView = UIStackView()
            stackView.axis = .vertical
            stackView.distribution = .fill
            stackView.alignment = .center
            stackView.translatesAutoresizingMaskIntoConstraints = false
            return stackView
        }()
        
        private lazy var myTextField: UITextField = {
            let textField = UITextField()
            textField.translatesAutoresizingMaskIntoConstraints = false
            textField.text = "Hello world"
            textField.backgroundColor = .green
            return textField
        }()
        
        private lazy var testView: UIView = {
            let view = UIView(frame: .zero)
            view.translatesAutoresizingMaskIntoConstraints = false
            view.backgroundColor = .systemPink
            return view
        }()
        
        private lazy var button: UIButton = {
            let view = UIButton()
            view.backgroundColor = .blue
            view.setTitle("hide it", for: .normal)
            view.translatesAutoresizingMaskIntoConstraints = false
            
            view.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
            return view
        }()
    
        @objc func buttonTapped() {
            myTextField.isHidden = !myTextField.isHidden
        }
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            view.backgroundColor = .white
            
            stackView.addArrangedSubview(myTextField)
            stackView.addArrangedSubview(testView)
            stackView.addArrangedSubview(button)
            view.addSubview(stackView)
            
            stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
            stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -64.0).isActive = true
            stackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
            stackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    
            myTextField.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
            myTextField.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -64.0).isActive = true
    
            testView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
            
            button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
            button.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -64.0).isActive = true
        }
    }
    

    【讨论】:

    • 嗨@Mahshid,你能添加一些关于如何实现这一点的代码示例吗?
    • @Walucas 更新了!
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2013-01-09
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多