当我使用SnapKit配置自动布局时,我实现了如下所示的按钮。
即使屏幕已水平更改,仍将frame.width的值计算为垂直时的值。
如果在启动第一个应用程序时屏幕是水平的,则frame.width将继续计算为水平模式值。
我是否需要更新约束以反映宽度变化的方向?
nextButton.snp.updateConstraints { (make) in
make.left.equalTo(buttonView.snp.left).offset(self.view.frame.width / 2) // <- here
}
答案 0 :(得分:1)
看起来您需要在过渡期间更新宽度约束。下面是在布局过渡(方向更改)过程中将调用的方法。
func viewWillTransition(to size: CGSize,
with coordinator: UIViewControllerTransitionCoordinator)
您可以重写此方法,并使用来更新约束。
答案 1 :(得分:0)
问题在于self.view.frame.width / 2
是固定金额。以后不会仅仅因为frame.width
发生变化而神奇地改变自身。
事实是,这是构造约束的糟糕方法。自动布局的全部目的是相对于其他东西做相对,而不是像这样对硬数字进行 。您试图将按钮的左边缘放在self.view
的水平中心,那么为什么不首先这么说呢?