ios - 如何根据 iPad 上的方向更改布局?

标签 ios swift ipad interface-builder size-classes

我只是在看新 iPad Air 2 上的时钟应用程序,当更改方向时,它会影响布局。世界时钟选项卡中有 6 个时钟,纵向有 2 行,每行 3 个时钟,但横向有 1 行,每行 6 个时钟。

我没有看到任何基于 xcode 6 中的尺寸类别的内容,允许区分横向和纵向,是否有不同/更好的方法来做到这一点?

最佳答案

有一个方法-- willTransitionToTraitCollection:withTransitionCoordinator: --让您知道任何特征(例如水平尺寸类别、垂直尺寸类别、显示比例或用户界面习惯用法)何时发生变化。

时,您可以检查newCollection.verticalSizeClass以查看它是否等于.Compact(横向)或.Regular(纵向) UIDevice.currentDevice().userInterfaceIdiom != .Pad

例如:

override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.willTransitionToTraitCollection(newCollection, withTransitionCoordinator: coordinator)
    if UIDevice.currentDevice().userInterfaceIdiom != .Pad {
        switch newCollection.verticalSizeClass {
        case .Compact:
            goLandscapeWithCoordinator(coordinator)
        case .Regular, .Unspecified:
            hideLandscapeWithCoordinator(coordinator)
        }
    }
}

goLandscapeWithCoordinator(coordinator) 可能看起来像这样,例如:

func goLandscapeWithCoordinator(coordinator: UIViewControllerTransitionCoordinator) {

    let landscapeVC = storyboard!.instantiateViewControllerWithIdentifier("LandscapeViewController") as? LandscapeViewController

    if let controller = landscapeVC {

        controller.view.frame = view.bounds
        controller.view.alpha = 0

        view.addSubview(controller.view)
        addChildViewController(controller)

        coordinator.animateAlongsideTransition({ _ in
            controller.view.alpha = 1
            },
            completion: { _ in
                controller.didMoveToParentViewController(self)
        })

    }
}

关于ios - 如何根据 iPad 上的方向更改布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280191/

相关文章:

ios - 如何在后台取消所有 afhttpsessionmanager 请求?

objective-c - 未发送/接收 NSNotificationCenter 通知

ios 9 应用程序不在后台报告位置

swift - 是否可以将 Swift 源代码添加到 Xcode?如果是,如何?

ios - IQkeyboardManager 库中的完成按钮不可见

ipad - 移动 Safari HTML5 视频 - 事件监听器 'ended' 第二次未触发

ios - 为什么我的 SwiftUI 应用程序在将 `NavigationLink` 放入 `navigationBarItems` 中的 `NavigationView` 中后向后导航时会崩溃?

iOS 在带有 ARC 的 MutableArray 中保存 UIView 引用

ios - 核心数据——获取、排序和编辑/更新属性

ios - 在两台 iPad 上同步应用程序