转动屏幕时的自动布局位置问题
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
的水平中心,那么为什么不一开始就这么说呢?
【讨论】:
以上是关于转动屏幕时的自动布局位置问题的主要内容,如果未能解决你的问题,请参考以下文章