【问题标题】:iOS: Size classes and device orientation at launchiOS:启动时的尺寸等级和设备方向
【发布时间】:2015-09-23 05:37:00
【问题描述】:

这是我的问题:将 iPhone 6 Plus 或 iPad 旋转到例如LandscapeLeft.

假设您的应用具有以下代码(仅作为示例)

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {

    return UIInterfaceOrientationMask.Portrait 
    // mine does use All, but with this case you'll understand my question
}

我如何检测设备何时应该使用垂直或水平布局

func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)

被调用?

print(UIScreen.mainScreen().bounds.width < UIScreen.mainScreen().bounds.height)
// will return false, because we started in landscape but the layout will be forced to be vertical here

print(UIApplication.sharedApplication().statusBarOrientation == .LandscapeLeft)
// will return true, because we started in landscape but the layout will be forced to be vertical here

主要问题出现在 iPad 上,因为两个尺寸等级都是regular

我很困惑,不知道如何解决这个问题。

【问题讨论】:

    标签: ios swift device-orientation


    【解决方案1】:

    不要认为您的布局是垂直和水平的。只需让应用旋转,并响应尺寸等级或尺寸变化。

    在 iPad 上,尽量避免使用两种布局。只需使用自动布局自动重新调整比例。但如果您必须在 iPad 上响应旋转,则响应 viewWillTransitionToSize(因为特征集合不会改变)。

    【讨论】:

    • 我正在尝试构建一个自定义机制,该机制将自动应用水平或垂直约束。仅调整视图大小不是一种选择,因为我希望能够在需要时构建两种不同的布局。这样一来,垂直布局就可以完全不同于水平布局。
    • 明白。但答案就在我的回答中。观看viewWillTransitionToSize 并将宽度与高度进行比较以确定发生了什么。
    • 这是一个您可以下载并试用的实际示例:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 展示了如何在 iPad 上根据旋转换出布局。
    • 是的,仍在苦苦挣扎如何建立一个良好的动态机制,可以根据需要响应一切。 :) 这个例子有点类似于我已经建立的当前机制,但它目前的状态并不完美。 ... 顺便提一句。当您在使用新的多任务处理时调整应用大小时,新 iPad 上的特征集合可能会发生变化。
    • “当您在使用新的多任务处理时调整应用程序大小时,新 iPad 上的特征集合可能会发生变化”正确,但这不是您要问的。我只是想解释如何响应 iPad 上的旋转。顺便说一句,如果您认为没有足够的大小班,欢迎加入俱乐部。
    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2015-09-20
    • 2016-10-06
    • 1970-01-01
    • 2016-03-02
    • 2015-04-05
    相关资源
    最近更新 更多