xcode9模拟器布局故障
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)
}
我现在完全没有任何线索了。任何帮助都感激不尽。
I am calling this in viewWillAppear
必须在viewDidAppear中调用,就这么简单
这是经典 "gotchya" !
PaulW11 已经给出了答案,我把它放在这里只是为了帮助 googlers。
在 viewWillAppear 中,显然视图 尚未出现 但它会出现。
在 viewDidAppear 中,视图 实际上确实出现了 。这意味着,毫无疑问,一切都在屏幕上,当然,因此,完全布局。
作为一个规则如果你是一个业余爱好者iOS程序员,就像一个"general rule"只使用viewDidAppear.
99% 的情况下 "everyday solution"。
公平地说 viewWillAppear 和 viewDidLayoutSubviews 和 viewDidLoad 仅供专业使用。 "Nothing bad will happen" 除了最微妙的无关紧要,例如,性能效果,如果您只使用 viewDidAppear。所以,很简单,总是使用 viewDidAppear。
关于 viewDidLayoutSubviews 等之间的细微差别,这确实是一个大问题,每个版本都略有不同,并且具有自动布局等特定的神秘细节;这超出了本次 QA 的范围。
我几乎可以说 Apple 不应该如此显着地暴露 viewDidLayoutSubviews 和 viewWillAppear 以及 viewDidLoad 给 "general public"。例如,如果您是初学者或业余程序员,则根本不需要使用 CALayer 之类的东西,也不需要传递触摸、构建自己的手势、操纵过渡动画等。
同样,使用 viewDidLayoutSubviews 或 viewWillAppear 或 viewDidLoad 的需求实际上为零。只需使用 "viewDidAppear"(在少数情况下您甚至需要它),一切就绪。
顺便说一句,值得注意的是,如果您只使用容器视图,您应该在任何时候都在任何地方使用它,(这里是关于容器视图的 epic tutorial!!)这些 UI 赛道很少出现问题。
我正在使用 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)
}
我现在完全没有任何线索了。任何帮助都感激不尽。
I am calling this in viewWillAppear
必须在viewDidAppear中调用,就这么简单
这是经典 "gotchya" !
PaulW11 已经给出了答案,我把它放在这里只是为了帮助 googlers。
在 viewWillAppear 中,显然视图 尚未出现 但它会出现。
在 viewDidAppear 中,视图 实际上确实出现了 。这意味着,毫无疑问,一切都在屏幕上,当然,因此,完全布局。
作为一个规则如果你是一个业余爱好者iOS程序员,就像一个"general rule"只使用viewDidAppear.
99% 的情况下 "everyday solution"。
公平地说 viewWillAppear 和 viewDidLayoutSubviews 和 viewDidLoad 仅供专业使用。 "Nothing bad will happen" 除了最微妙的无关紧要,例如,性能效果,如果您只使用 viewDidAppear。所以,很简单,总是使用 viewDidAppear。
关于 viewDidLayoutSubviews 等之间的细微差别,这确实是一个大问题,每个版本都略有不同,并且具有自动布局等特定的神秘细节;这超出了本次 QA 的范围。
我几乎可以说 Apple 不应该如此显着地暴露 viewDidLayoutSubviews 和 viewWillAppear 以及 viewDidLoad 给 "general public"。例如,如果您是初学者或业余程序员,则根本不需要使用 CALayer 之类的东西,也不需要传递触摸、构建自己的手势、操纵过渡动画等。
同样,使用 viewDidLayoutSubviews 或 viewWillAppear 或 viewDidLoad 的需求实际上为零。只需使用 "viewDidAppear"(在少数情况下您甚至需要它),一切就绪。
顺便说一句,值得注意的是,如果您只使用容器视图,您应该在任何时候都在任何地方使用它,(这里是关于容器视图的 epic tutorial!!)这些 UI 赛道很少出现问题。