我在界面生成器中使用类大小,为不同的大小定义略有不同的设计。
我的一个视图没有针对特定尺寸安装。这按预期工作,但现在我想以编程方式判断该视图是否已安装。无论是否安装,看起来视图永远不会为零,而且我看不到任何要检查的 isInstalled 标志。
这样做的正确方法是什么?
我在界面生成器中使用类大小,为不同的大小定义略有不同的设计。
我的一个视图没有针对特定尺寸安装。这按预期工作,但现在我想以编程方式判断该视图是否已安装。无论是否安装,看起来视图永远不会为零,而且我看不到任何要检查的 isInstalled 标志。
这样做的正确方法是什么?
这不是一个很好的解决方案,但我还没有找到更好的解决方案:
文档声明“仍会创建已卸载视图的运行时对象。但是,视图和任何相关约束都不会添加到视图层次结构中,并且视图的超级视图属性为 nil”。
因此,对有效超级视图的测试可以作为一种解决方案,但我发现它必须在viewDidAppear
. 例如,superviews 仍然为零viewWillAppear
。
来自 Apple Docs:安装和卸载大小类的视图
仍会创建已卸载视图的运行时对象。但是,视图和任何相关约束都不会添加到视图层次结构中,并且视图的超级视图属性为 nil。这与隐藏不同。隐藏视图与任何相关约束一样位于视图层次结构中。
您可以通过评估来检查PossiblyUninstalledView.superView != nil
. 如果为真,则该类已正确安装。
您可以对 UIView 进行扩展并检查该视图是否具有超级视图。如果已安装,则返回 true,如果未安装,则返回 false。
extension UIView {
func isInstalled() -> Bool{
return (self.superview != nil) ? true : false
}
}