要避免在UIModalPresentationStyle.pageSheet中向下拉动UITableView来取消显示的模态视图,可以通过以下代码示例来解决:
首先,您需要为UITableViewDelegate添加一个属性来跟踪是否可以滚动:
var tableViewCanScroll = true
接下来,在UITableViewDelegate的scrollViewDidScroll方法中,检查UITableView是否可以滚动,并设置tableViewCanScroll的值:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y <= 0 {
tableViewCanScroll = true
} else {
tableViewCanScroll = false
}
}
然后,在UIViewController中,覆盖preferredScreenEdgesDeferringSystemGestures方法,并返回一个包含底部边缘的UIRectEdge集合,以阻止向下拉动手势取消显示模态视图:
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
return .bottom
}
最后,在viewDidLoad方法中,将UITableView的bounces属性设置为tableViewCanScroll的值:
override func viewDidLoad() {
super.viewDidLoad()
tableView.bounces = tableViewCanScroll
}
通过以上代码,您可以阻止在UIModalPresentationStyle.pageSheet中向下拉动UITableView来取消显示模态视图。