繁体   English   中英

xcode 9模拟器布局故障

[英]xcode 9 Simulator layout malfunction

我正在使用xcode 9.0.0。 我将多个自定义类应用于不同的视图。 每当我在真正的大尺寸设备上运行项目时,它就会显示出完美的视图,而当我在模拟器上进行构建时,布局会从右侧挤压。 任何UIView类型都会发生这种情况。 下面提供一个示例。

在此处输入图片说明

在这里,我正在应用渐变,但是右侧的一部分被忽略了。 每种视图都会发生这种情况。 我上面的示例代码是:

func addBlackGradientLayer(frame: CGRect){
    let gradient = CAGradientLayer()
    gradient.frame = frame
    gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
    gradient.locations = [0.0, 1.0]
    self.layer.addSublayer(gradient)
}

我现在完全没有任何线索。 任何帮助都感激不尽。

我在viewWillAppear中称呼它

您必须在viewDidAppear中调用它,就这么简单。

这是经典的“ gotchya”!

PaulW11已经给出了答案,我只是将其放在此处以帮助Google员工。


在viewWillAppear中,显然还没有出现视图,但是会出现

在viewDidAppear中,视图实际上已经出现 毫无疑问,这意味着屏幕上的所有内容都将毫无疑问地摆在屏幕上,因此当然是完全摆放的。

通常,如果您是爱好iOS的程序员,就像“一般规则”一样,请只使用viewDidAppear

在99%的情况下,这就是“日常解决方案”。

可以说viewWillAppear和viewDidLayoutSubviews和viewDidLoad仅用于专业用途。 如果只使用viewDidAppear ,那么除了最微妙的无关紧要的东西(例如性能影响)之外,“不会发生任何不良情况”。 因此,很简单,始终使用viewDidAppear。

关于viewDidLayoutSubviews等之间的细微差异,这确实是一个很大的问题,每个版本之间都有细微的差异,并且自动布局等的具体奥秘细节也是如此。 它超出了此质量检查的范围。

我几乎要说,苹果不应该向“公众”公开展示viewDidLayoutSubviews和viewWillAppear和viewDidLoad。 例如,如果您是初学者或业余程序员,则根本不需要使用CALayer之类的东西,也不需要传递触摸,建立自己的手势,操纵过渡动画等。

同样,使用viewDidLayoutSubviews或viewWillAppear或viewDidLoad确实只有零需求。 只需使用“ viewDidAppear”(在少数情况下,您需要使用它)就可以了。

顺便说一句,值得注意的是,如果您只是使用容器视图,那么您应该一直在任何地方使用它(这是关于容器视图的史诗教程 !),这种UI竞赛问题很少出现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM