动画具有子视图的 UIView 的大小调整

nic*_*f89 1 xcode uitableview uiview uiviewanimation swift

我有一个 UIView 有一个 UITableView 子视图。

UIView 是一个菜单,初始宽度为设备宽度的 50%,UITableView 对 UIView 具有 AutoLayout 约束。

在菜单中选择一个项目会触发 UIView 将大小调整为设备宽度的 33%。UITableView,正如我所料,在没有动画的情况下改变大小,然后 UIView 通过动画赶上它。

有没有什么简单的方法可以用我的 UIView 为我的 UITableView 设置动画,同时保持 AutoLayout 约束?

我在与 UIView 相同的动画块中尝试了以下操作:

let tableWidth = self.mm.menuOneController.tableView.bounds.size.width
let newTableWidth = (tableWidth * 2) / 3
self.mm.menuOneController.tableView.bounds.size.width = newTableWidth
Run Code Online (Sandbox Code Playgroud)

这是有效的,UITableView 与 UIView 一起随着动画调整大小,但是 AutoLayout 并不像我期望的那样工作。

UIView 的 X 值是 0.0,所以它被固定在超级视图的左边,当它调整大小时,它是从右手大小开始的。但是, UITableView 似乎在左右调整大小,直到达到正确的宽度(我希望这是有道理的)。

有什么建议?

提前致谢!

the*_*wan 5

从动画块中丢失您在问题中列出的三行,并在块的末尾添加layoutIfNeeded()对正在更改大小的视图的调用。(即<yourMenuView>.layoutIfNeeded()

这会导致在每个动画帧中重新应用约束,根据需要调整所有子视图的布局以符合约束。