【问题标题】:How to change autolayout constraints when the device rotates?设备旋转时如何更改自动布局约束?
【发布时间】:2015-11-08 18:32:30
【问题描述】:

我在对应的视图控制器中将 IB 中的约束设置为 IBOutlet。我在 IB 和情节提要中设置的此类约束的值用于纵向。我需要在设备更改为横向时更改这些约束,并在再次旋转为纵向时恢复它们。

我已经阅读了几篇关于在旋转设备时更新约束的帖子,但每个帖子都说不同的东西,我不明白应该是哪个过程和方法调用......我一直在 Apple 的文档中搜索关于Autolayout 但我没有找到任何关于如何在旋转设备时以编程方式更改约束。

我对@9​​87654323@ 知之甚少,对此我真的很迷茫……我希望能清楚地解释我应该如何处理这种情况。

提前致谢

【问题讨论】:

    标签: ios rotation autolayout orientation nslayoutconstraint


    【解决方案1】:

    UIViewController 接收触发的几个方向相关的调用 如果视图控制器是 由窗口管理的控制器层次结构。

    所以基本上你必须重写该方法并在那里更新自动布局约束。

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        if UIDevice.current.orientation.isLandscape {
            // Landscape
            constraintName.constant = 20.0  // constraintName will be your IBoutlet Constraint
        } else {
            // Portrait
            constraintName.constant = 100.0 // constraintName will be your IBoutlet Constraint
        }
    }
    

    希望它能解决你的问题。

    【讨论】:

      【解决方案2】:

      我相信,Interface Builder 中的 Size Classes 是实现目标的最佳方式:

      Link to good tutorial

      Link to Apple's official docs

      【讨论】:

      • 再次感谢。关键是我需要为 iPhone 设备支持 iOS 7 及更高版本,并且我已经有一个仅启用自动布局的情节提要。我在这个故事板中大约有 32 个场景......在这一点上移动到大小类是否值得,并考虑到我必须支持 iOS 7?
      • @AppsDev 移动到尺寸等级支持只是意味着为某些尺寸等级更改某些屏幕的某些特定约束。您不需要重写所有约束,这很好:-) 关于支持 iOS7 - 统计数据将帮助您做出决定:david-smith.org/iosversionstatsmixpanel.com/trends/#report/ios_9
      • 谢谢。关于支持 iOS 7,我知道目前不值得,但这是给我的要求...
      猜你喜欢
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多