翻屏时Auto-Rayout位置问题
Auto-Rayout position problem when turning the screen
当我使用 SnapKit 配置自动布局时,我实现了如下所示的按钮。
即使屏幕已经水平变化,frame.width的值仍然计算为垂直时的值。
如果启动第一个应用时屏幕是水平的,frame.width将继续计算为水平模式值。
我是否需要更新约束以反映更改后的宽度方向?
nextButton.snp.updateConstraints { (make) in
make.left.equalTo(buttonView.snp.left).offset(self.view.frame.width / 2) // <- here
}
看起来您需要在 transition.Below 期间更新宽度约束是将在布局转换(方向更改)期间调用的方法。
func viewWillTransition(to size: CGSize,
with coordinator: UIViewControllerTransitionCoordinator)
您可以覆盖此方法并使用 更新约束。
问题是 self.view.frame.width / 2
是固定数量。以后它不会因为 frame.width
发生变化而神奇地改变自己。
事实上,这是构建约束的糟糕方法。自动布局的全部意义在于相对于做其他事情,不是像这样硬编码数字。您正试图将按钮的左边缘放在 self.view
的水平中心,那么您为什么不一开始就这么说呢?
当我使用 SnapKit 配置自动布局时,我实现了如下所示的按钮。
即使屏幕已经水平变化,frame.width的值仍然计算为垂直时的值。
如果启动第一个应用时屏幕是水平的,frame.width将继续计算为水平模式值。
我是否需要更新约束以反映更改后的宽度方向?
nextButton.snp.updateConstraints { (make) in
make.left.equalTo(buttonView.snp.left).offset(self.view.frame.width / 2) // <- here
}
看起来您需要在 transition.Below 期间更新宽度约束是将在布局转换(方向更改)期间调用的方法。
func viewWillTransition(to size: CGSize,
with coordinator: UIViewControllerTransitionCoordinator)
您可以覆盖此方法并使用 更新约束。
问题是 self.view.frame.width / 2
是固定数量。以后它不会因为 frame.width
发生变化而神奇地改变自己。
事实上,这是构建约束的糟糕方法。自动布局的全部意义在于相对于做其他事情,不是像这样硬编码数字。您正试图将按钮的左边缘放在 self.view
的水平中心,那么您为什么不一开始就这么说呢?