我有一个UITableView,它在其超级视图的边缘略微延伸。响应按钮的点击,我通过设置约束常数来移动表格。这是一个简单的示例:
@IBOutlet weak var tableViewTrailingConstraint: NSLayoutConstraint!
var edgeHidden: Bool = true
@IBAction func shiftTableButtonTapped(_ sender: UIButton) {
shiftTable(edgeHidden)
}
func shiftTable(showEdge: Bool) {
// Finish any pending layout changes
view.layoutIfNeeded()
// Update location of table
tableViewTrailingConstraint.constant = showEdge ? -50.0 : 0.0
// Shift the table
UIView.animate(duration: 0.3) { [weak self] in
guard let view = self?.view else { return }
view.layoutIfNeeded()
}
}
执行此操作时,表格将按预期移动,但内容偏移量也沿y方向更改。似乎scrollview要根据布局更改而移动。
有人知道解决这个问题的方法吗?我还没有运气来重置内容偏移量(这样做时我的行为异常怪异),也没有禁用滚动帮助。
如果我不设置动画,也可以呼叫setNeededLayout()
而不是layoutIfNeeded()
或其他响应建议的其他无数事物。