ios – StackView isHidden属性未按预期更新

前端之家收集整理的这篇文章主要介绍了ios – StackView isHidden属性未按预期更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试更新UIStackView以便显示一个字段,如果UITextField的值等于“Other”.这是我的代码
@IBOutlet var stackView: UIStackView!
func updateView() {
    print("UPDATING")
    UIView.animate(withDuration: 0.25,animations: { () -> Void in
         if(self.myTextField.text! == "Other") {
              print("SHOWING")
              self.stackView.arrangedSubviews[3].isHidden = false
         } else {
              print("HIDING")
              self.stackView.arrangedSubviews[3].isHidden = true
         }
         print("Is hidden: \(self.stackView.arrangedSubviews[3].isHidden )")
    })

示例输出如下所示:

> UPDATING
> HIDING
> Is hidden: true
> UPDATING
> SHOWING
> Is hidden: true

如您所见,isHidden属性报告为true,无论上面的代码将其设置为什么.我无法弄清楚为什么会这样,但也许这里有人可以吗?有没有明显的东西需要检查? isHidden有什么理由无法更新吗? (注意输出中没有出现错误).

解决方法

用户界面上的更新必须始终在主线程(THE LAW)上完成.

因此,在主要的thead上包装UI更新:

@IBOutlet var stackView: UIStackView!
func updateView() {
    print("UPDATING")
    UIView.animate(withDuration: 0.25,animations: { () -> Void in
        DispatchQueue.main.async {  // UI updates on the main thread
            if(self.myTextField.text! == "Other") {
                print("SHOWING")
                self.stackView.arrangedSubviews[3].isHidden = false
             } else {
                print("HIDING")
                self.stackView.arrangedSubviews[3].isHidden = true
             }
             print("Is hidden: \(self.stackView.arrangedSubviews[3].isHidden )")
        }
    })

猜你在找的iOS相关文章