我有一个简单的用户界面(非常类似于Uber),用户可以在主要内容的顶部滚动表格视图。
UI和相应的UITableView动画错误可以显示为:
以下是发生的事情:
tableView.top = topMenu.bottom
的布局约束来完成的。被删除的约束是tableView.height = 30
。一切都很好。相关代码在这里:
private func animateTheChange() {
UIView.animate(withDuration: 0.8, animations: {
self.view.setNeedsUpdateConstraints()
self.view.layoutIfNeeded()
})
}
override func updateViewConstraints() {
self.touchConstraints()
super.updateViewConstraints()
}
private func touchConstraints() {
if self.collapsed {
self.view.addConstraint(self.collapsedConstraint)
self.view.removeConstraint(self.expandedConstraint)
if UserHardware.IS_IPHONE_X {
self.bottomConstraint.constant = 0
}
}
else { // Expand
self.view.addConstraint(self.expandedConstraint)
self.view.removeConstraint(self.collapsedConstraint)
if UserHardware.IS_IPHONE_X {
self.bottomConstraint.constant = 34
}
}
}
相关的Stackoverflow问题(有帮助但无法解决问题):
答案 0 :(得分:1)
一种选择......
UIView
topMenu
(默认为低)将包含视图顶部限制在Priority of 250
的底部,并将其连接到@IBOutlet var tableContainerTop: NSLayoutConstraint!
30
(默认为高)将包含视图的高度限制为Priority of 750
,并将其连接到@IBOutlet var tableContainerHeight: NSLayoutConstraint!
如果要“扩展”或“折叠”tableView,请更改包含视图约束的优先级。
UIView.animate(withDuration: 0.8, animations: {
if self.isExpanded {
self.tableContainerHeight.priority = .defaultHigh
self.tableContainerTop.priority = .defaultLow
} else {
self.tableContainerHeight.priority = .defaultLow
self.tableContainerTop.priority = .defaultHigh
}
self.view.layoutIfNeeded()
})