旋转屏幕时自动光线照射位置问题

时间:2019-09-06 00:56:30

标签: swift rotation ios-autolayout snapkit

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

即使屏幕已水平更改,仍将frame.width的值计算为垂直时的值。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

您可以重写此方法,并使用来更新约束。

答案 1 :(得分:0)

问题在于self.view.frame.width / 2是固定金额。以后不会仅仅因为frame.width发生变化而神奇地改变自身。

事实是,这是构造约束的糟糕方法。自动布局的全部目的是相对于其他东西做相对,而不是像这样对硬数字进行 。您试图将按钮的左边缘放在self.view的水平中心,那么为什么不首先这么说呢?