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

标签 ios swift uistackview

我正在尝试更新 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 有什么原因不能更新吗? (注意输出中没有出现错误)。

最佳答案

这是已知的 UIStackView 错误 (http://www.openradar.me/25087688)。 SO 上有一个关于它的线程:( Swift: Disappearing views from a stackView )。长话短说:

The bug is that hiding and showing views in a stack view is cumulative. Weird Apple bug. If you hide a view in a stack view twice, you need to show it twice to get it back.

要解决此问题,您可以使用以下扩展:

extension UIView {
    var isHiddenInStackView: Bool {
        get {
            return isHidden
        }
        set {
            if isHidden != newValue {
                isHidden = newValue
            }
        }
    }
}

关于ios - StackView isHidden 属性未按预期更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831695/

相关文章:

ios - IB 的 UIScrollView 不滚动

ios - 从 podspec 或 info.plist 中检索 pod 版本到代码中

ios - 添加指向 Apple Passbook 首页的超链接

swift - 在 SwiftUI View 中实现委托(delegate)

ios - 尝试设置 Firebase 推送通知时出现错误

ios - Swift CollectionView ReloadData 行为怪异

swift - 访问嵌套堆栈 View

ios - 'NSString !' is not convertible to ' 字符串';您的意思是使用 'as!' 强制向下转换吗?

ios - UIStackView Peek 和 Pop 覆盖故障

ios - 在屏幕上显示之前确定 UIStackView 的固有大小