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

Animating the resize of a UIView that has subviews

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

UIView 是一个菜单,初始宽度为设备宽度的 50%,UITableView 对 UIView 有自动布局约束。

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

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

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

let tableWidth = self.mm.menuOneController.tableView.bounds.size.width
let newTableWidth = (tableWidth * 2) / 3
self.mm.menuOneController.tableView.bounds.size.width = newTableWidth

这是有效的,UITableView 正在随 UIView 一起调整动画大小,但是 AutoLayout 并没有像我预期的那样工作。

UIView 的 X 值为 0.0,因此它被固定在父视图的左侧,当它调整大小时,它会从右手大小开始调整。但是,UITableView 似乎在左右两侧均等调整大小,直到达到正确的宽度(我希望这是有道理的)。

有什么建议吗?

提前致谢!

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

这会导致每个动画帧中的约束 re-applied 根据需要调整所有子视图的布局以符合约束。