我正在尝试更新UIStackView
以便显示一个字段,如果 a 的值UITextField
equal "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
无法更新? (注意输出中没有出现错误)。
它被称为UIStackView
bug (http://www.openradar.me/25087688 http://www.openradar.me/25087688)。 SO 上有一个关于它的线程:(Swift:从 stackView 中消失视图 https://stackoverflow.com/questions/40001416/swift-disappearing-views-from-a-stackview)。长话短说:
错误在于,在堆栈视图中隐藏和显示视图是
累积的。奇怪的苹果错误。如果在堆栈视图中隐藏视图两次,
您需要出示两次才能将其取回。
要解决此问题,您可以使用以下扩展:
extension UIView {
var isHiddenInStackView: Bool {
get {
return isHidden
}
set {
if isHidden != newValue {
isHidden = newValue
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)