我正在使用界面构建器中的类大小,为不同的大小定义稍微不同的设计。
我的一个视图未安装到特定的大小。这符合预期,但现在我希望能够编程地判断该视图是否已安装。无论它是否被安装,似乎该视图永远不为空,并且我找不到任何可以检查的isInstalled标志。
正确的做法是什么?
我正在使用界面构建器中的类大小,为不同的大小定义稍微不同的设计。
我的一个视图未安装到特定的大小。这符合预期,但现在我希望能够编程地判断该视图是否已安装。无论它是否被安装,似乎该视图永远不为空,并且我找不到任何可以检查的isInstalled标志。
正确的做法是什么?
这并不是一个非常好的解决方案,但我还没有找到更好的方案:
文档指出:"未安装视图的运行时对象仍然会被创建。然而,该视图及其相关的约束不会添加到视图层次结构中,并且视图具有无效的 superview 属性"。
因此,测试有效的 superview 可以作为解决方案,但是我发现它必须相对比较晚进行 - 在 viewDidAppear
中。例如,在 viewWillAppear
中 superviews 仍然为空。
extension UIView {
func isInstalled() -> Bool{
return (self.superview != nil) ? true : false
}
}
来自Apple Docs:为大小类安装和卸载视图
未安装的视图会创建一个运行时对象。但是,该视图及其相关约束不会添加到视图层次结构中,并且该视图的superview属性为nil。这与隐藏视图不同。隐藏视图和任何相关的约束都在视图层次结构中。
您可以通过评估PossiblyUninstalledView.superView!= nil
来进行检查。如果为真,则类正确安装。