我正在尝试更新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 )") } })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。