xcode 9模拟器布局故障
我正在使用xcode 9.0.0。我有多个自定义类应用于不同的视图。每当我在真实大小的设备上运行项目时,它都会显示出完美的视图,而当我在模拟器上构建它们时,布局会从右侧挤压。这发生在任何UIView类型中。下面提供了一个示例。xcode 9模拟器布局故障
在这里,我申请一个梯度,但在右侧部分被省略了。这发生在每一个观点。我的代码为上面的例子是:
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已经给出了答案,我只是把它放在这里来帮助谷歌。
在viewWillAppear中,显然不够的观点尚未出现却会。
在viewDidAppear中,视图实际上字面上出现了。这意味着,毫无疑问,所有事物都在屏幕上,当然也就是完全布局。
作为一个规则,如果你是一个业余爱好者的iOS程序员,只是作为一个“一般规则” 永远只能使用viewDidAppear。
这是99%案例中的“日常解决方案”。
可以说viewWillAppear和viewDidLayoutSubviews和viewDidLoad仅供专业人士使用。 “除了最微妙的不相关之外,没有什么不好的事情会发生,例如,性能影响,如果你只是使用viewDidAppear。所以,很简单,总是使用viewDidAppear。
关于viewDidLayoutSubviews等之间的细微差别,这真是一个大问题,从版本略有不同,以版本和具有自动布局等具体细节神秘;它超出了本质量保证范围。
我几乎可以说苹果不应该暴露,以便突出viewDidLayoutSubviews和viewWillAppear中和viewDidLoad中的“公众”。例如,如果您是初学者或爱好者程序员,则完全不需要使用诸如CALayer之类的东西,或者通过触摸,构建自己的手势,操纵过渡动画等。
同样,真的只是零需要使用viewDidLayoutSubviews或viewWillAppear或viewDidLoad。只需使用“viewDidAppear”(在少数情况下你需要它),你就全都设置好了。
顺便提一句,如果你只是使用容器视图,你应该随时随地使用容器视图(这里是容器视图上的epic tutorial !!),这些UI跑道问题很少出现。
'viewDidAppear' vs'viewWillAppear' vs'viewDidLayoutSubviews',它们在这种情况下究竟有什么不同? –
嗨,我回答了你的问题@AakashDave。如果(出于某种原因)你想了解这方面的细节,有大量的文章,苹果技术讲座等等 – Fattie
您是否收到有关冲突或不足约束的警告?你有什么限制?你在哪里打电话给你显示的代码? – Paulw11
你在哪里调用这个函数?在'view'的'frame'已经完全布置之前,你很可能会调用它。 – Paolo
@ Paulw11我尝试自动调整大小/添加缺少的约束/设置我自己的约束。另外,我没有收到有关限制的任何警告。即使是现在,该图像仍在自动布局中,并且没有任何警告/问题。 –