xcode 9模拟器布局故障

时间:2017-10-21 20:58:31

标签: ios swift xcode ios-simulator

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

enter image description here

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

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)
}

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

1 个答案:

答案 0 :(得分:2)

  

我在viewWillAppear中调用它

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

这是经典的“gotchya”!

PaulW11已经给出了答案,我只是把它放在这里帮助googlers。

在viewWillAppear中,显然该视图尚未出现,但它会。

在viewDidAppear中,视图实际上已经出现。这意味着,毫无疑问,屏幕上的一切都在那里,当然,完全是布局的。

作为规则如果你是一个业余爱好者的iOS程序员,就像“一般规则”只使用viewDidAppear

这是99%的案例中的“日常解决方案”。

可以说viewWillAppear和viewDidLayoutSubviews和viewDidLoad仅供专业人士使用。如果你只是使用 viewDidAppear ,那么除了最微妙的无关紧要之外,“没有什么不好的事情会发生”,例如性能影响。所以,很简单,总是使用viewDidAppear。

关于viewDidLayoutSubviews等之间的细微差别,这是一个很大的问题,不同版本之间略有不同,并且具有autolayout等特定的神秘细节。它超出了本质量保证的范围。

我几乎可以说Apple不应该如此突出地显示viewDidLayoutSubviews并将viewWillAppear和viewDidLoad暴露给“普通大众”。例如,如果你是初学者或业余爱好者程序员,根本不需要使用像CALayer这样的东西,或者传递触摸,构建你自己的手势,操纵过渡动画等。

同样,实际上只需要使用viewDidLayoutSubviews或viewWillAppear或viewDidLoad。只需使用“viewDidAppear”(在少数情况下你就需要它)并且你已经完成了设置。

BTW值得注意的是,如果你只是使用容器视图,你应该随时随地使用它(这里是容器视图的epic tutorial !!)这些UI赛道问题很少出现。< / p>