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

时间:2017-01-23 16:49:30

标签: swift xcode uitableview uiview uiviewanimation

我有一个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

这很有效,UITableView正在调整动画和UIView,但是AutoLayout并没有像我期望的那样完成。

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

有什么建议吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

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

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