我有一个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似乎在左右两侧均匀调整,直到达到正确的宽度(我希望这是有意义的)。
有什么建议吗?
提前致谢!
答案 0 :(得分:3)
从动画块中丢失问题中列出的三行,并在块的末尾添加对正在改变大小的视图的layoutIfNeeded()
的调用。 (即<yourMenuView>.layoutIfNeeded()
)
这会导致在每个动画帧中重新应用约束,根据需要调整所有子视图的布局以符合约束。