【问题标题】:XCode 6 - iOS 8: programmatically check if view is installedXCode 6 - iOS 8:以编程方式检查是否安装了视图
【发布时间】:2014-12-12 14:13:01
【问题描述】:

我在界面生成器中使用类大小,为不同的大小定义略有不同的设计。

我的一个视图没有安装为特定大小。这按预期工作,但现在我想以编程方式判断该视图是否已安装。无论是否安装,看起来视图永远不会为零,而且我看不到任何要检查的 isInstalled 标志。

这样做的正确方法是什么?

【问题讨论】:

    标签: ios xcode xcode6 autolayout size-classes


    【解决方案1】:

    这不是一个很好的解决方案,但我还没有找到更好的解决方案:

    docs 声明“仍会创建已卸载视图的运行时对象。但是,视图和任何相关约束都不会添加到视图层次结构中,并且视图的超级视图属性为 nil”。

    因此,对有效超级视图的测试可以作为一种解决方案,但我发现它必须来得很晚 - 在viewDidAppear。例如,viewWillAppear 中的超级视图仍然为零。

    【讨论】:

      【解决方案2】:

      来自 Apple 文档:Installing and Uninstalling Views for a Size Class

      仍会创建已卸载视图的运行时对象。但是,视图和任何相关约束都不会添加到视图层次结构中,并且视图具有 nil 的超级视图属性。这与隐藏不同。隐藏视图与任何相关约束一样位于视图层次结构中。

      您可以通过评估PossiblyUninstalledView.superView != nil 来检查。如果为真,则该类已正确安装。

      【讨论】:

        【解决方案3】:

        您可以对 UIView 进行扩展并检查该视图是否具有超级视图。如果已安装,则返回 true,如果未安装,则返回 false。

        extension UIView {
            func isInstalled() -> Bool{
                return (self.superview != nil) ? true : false
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-08
          • 2022-12-03
          相关资源
          最近更新 更多