我正在尝试更新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 )") } })