【问题标题】:Method traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) of my UIView subclass not called when rotating旋转时未调用我的 UIView 子类的方法 traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
【发布时间】:2014-11-27 16:02:01
【问题描述】:

UITraitEnvironment 的文档说:

当当前 trait 集合时自动调用该方法 变化。覆盖此方法为您提供了一种自定义方法 与视图关联的特征集合更改时的行为。 如果您不重写此方法,则不会执行任何特殊行为。

但是当我旋转模拟器时,我的 UIView 子类中的这个方法没有被调用。

【问题讨论】:

  • 你可能在 iOS 7 上运行
  • 我发现如果将视图添加到UIApplication.sharedApplication.keyWindow 它将不会被调用。如果这适用于其他人。

标签: ios


【解决方案1】:

单独的 UIView 永远无法响应旋转变化。您需要从其包含的视图控制器重新配置当前方向/大小的视图。

如果您在 iPad 上,即使在 iOS 8 上,特征集合也不会因旋转而改变;你仍然会在 H:Regular, V:Regular。 您将要覆盖:

func viewWillTransitionToSize(_ size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)

响应视图控制器因旋转而改变的大小。 (一定要打电话给super!)

您可以通过比较尺寸的宽度和高度来判断视图控制器的“方向”(尽管现代 iOS 编程会鼓励您停止考虑方向):

let isPortrait = size.height > size.width

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多