如何根据ipad的方向更改布局?

时间:2015-07-07 22:07:46

标签: ios swift ipad interface-builder size-classes

我只是在新的ipad air 2上查看时钟应用程序,当更改方向时,它会影响布局。世界时钟标签有6个时钟,纵向有2行3个时钟,但在横向上有1行6个时钟。

我没有看到基于xcode 6中的大小类的任何东西,允许区分景观到肖像,是否有不同/更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

有一种方法 - 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)
        })

    }
}

答案 1 :(得分:1)

如果你打开故事板,你可以找到" wAny hAny"在控制台顶部,允许您指定宽度和高度类型(紧凑,任何,常规)。如果您指定了某种类型然后在故事板上进行布局工作,则您的布局将仅显示特定情况,这意味着您可以在故事板中为纵向和横向模式指定不同的布局。 例如,您可以选择" Compact Width |常规高度"将以纵向模式显示所有iPhone的布局,如果选择" Regular Width |紧凑的高度"布局将应用于横向模式的5.5英寸iPhone。