转动屏幕时的自动布局位置问题

Posted

技术标签:

【中文标题】转动屏幕时的自动布局位置问题【英文标题】:Auto-Rayout position problem when turning the screen 【发布时间】:2019-09-06 00:56:30 【问题描述】:

当我使用 SnapKit 配置自动布局时,我实现了如下所示的按钮。

即使屏幕水平发生了变化,frame.width的值仍然计算为垂直时的值。

如果第一个应用启动时屏幕是水平的,frame.width 将继续计算为水平模式值。

是否需要更新约束以反映宽度方向的变化?

nextButton.snp.updateConstraints  (make) in
    make.left.equalTo(buttonView.snp.left).offset(self.view.frame.width / 2) // <- here

【问题讨论】:

【参考方案1】:

看起来您需要在过渡期间更新宽度约束。以下是在布局过渡期间将调用的方法(方向更改)。

func viewWillTransition(to size: CGSize, 
                   with coordinator: UIViewControllerTransitionCoordinator)

您可以覆盖此方法并使用 更新约束。

【讨论】:

【参考方案2】:

问题在于self.view.frame.width / 2 是一个固定数量。以后它不会因为frame.width 的变化而神奇地改变自己。

事实上,这是构造约束的糟糕方法。自动布局的全部意义在于相对于其他事情,像这样的硬编码数字。您试图将按钮的左边缘放在self.view 的水平中心,那么为什么不一开始就这么说呢?

【讨论】:

以上是关于转动屏幕时的自动布局位置问题的主要内容,如果未能解决你的问题,请参考以下文章

自动布局按钮位置

自动布局内在内容大小以填满屏幕

使用自动布局时的内容拥抱

关闭自动布局似乎会改变屏幕的高度

iOS自动布局重置我所有的图像位置

iOS 中的自动布局