翻屏时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 的水平中心,那么您为什么不一开始就这么说呢?