【发布时间】:2017-06-08 06:20:59
【问题描述】:
我有一个 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 似乎在左右两边都调整大小,直到达到正确的宽度(我希望这是有道理的)。
有什么建议吗?
提前致谢!
【问题讨论】:
-
假设每个状态的约束都不是明确的,并且您已经调整了最终动画状态的约束,
UIView.animate...中的一个简单的layoutIfNeeded()(在它们的公共父视图上)就可以了。
标签: swift xcode uitableview uiview uiviewanimation