一尘不染

尺寸更改时在哪里更新自动版式约束?

swift

UIView沿着一个容器的底部布置了几个UIView。我希望这些视图的宽度始终相等,并始终拉伸以共同填充包含视图的宽度(如底部的表情符号键盘按钮)。我要解决的方法是为其中一个视图设置相等的宽度,然后仅将该视图的宽度约束更新为,superviewWidth / numberOfViews这将导致所有其他视图更新为相同的值。

我想知道更改约束常数的代码应该放在哪里。需要在键盘首次出现在屏幕上之前进行设置,并在旋转设备时进行更新。

我第一次尝试解决方案是将其放入updateViewConstraints并通过计算宽度containerView.frame.size.width。但是,此方法在加载时会被调用两次,第一次是正确计算值,但是第二次由于某种原因,containerView宽度为0.0。另一个问题是,旋转时,containerView的宽度不是旋转后的值,而是旋转前的当前值。但是我不想等到轮换完成后再更新约束,因为按钮将是原始大小,然后更改,这会给用户带来不便。

我的问题是:在哪里放置此代码最合适?有没有更好的方法来计算宽度是多少?我可以保证它将始终与屏幕宽度完全相同。我在Xcode
6中使用了大小类,因此willRotateToInterfaceOrientation不赞成使用类似的方法。


阅读 246

收藏
2020-07-07

共1个答案

一尘不染

没有理由手动更新宽度:

  1. 将所有视图以相等的宽度放置在视图中,彼此之间没有间距
  2. 给所有这些都添加一个相等的宽度约束
  3. 添加宽度为0的约束,以确保侧面之间的间距
  4. 降低一个或多个相等宽度约束的优先级,以防万一宽度无法均分。

然后自动布局将为您处理所有事情。

2020-07-07