ios13防止下拉滚动到顶部的tableView以消除以模态方式呈现的viewController [重复]
Posted
技术标签:
【中文标题】ios13防止下拉滚动到顶部的tableView以消除以模态方式呈现的viewController [重复]【英文标题】:ios13 prevent pulling down on tableView which is scrolled to top from dismissing sheet style modally presented viewController [duplicate] 【发布时间】:2019-11-02 23:10:38 【问题描述】:我有一个 tableViewController,它以默认的表单样式呈现模式呈现。
我想保留这种模态样式,因为它看起来不错并且在我的应用中运行良好。我喜欢下拉导航栏时的解雇。但是我不想要的是在 tableView 已经滚动到顶部时拉下 tableView 单元格以导致 tableViewController 被关闭。
是否有抑制这种行为但保持工作表样式模式表示的方法?我希望 tableView 上的下拉保持垂直反弹效果,并且只能通过下拉导航栏部分来通过 pan 关闭模态呈现的 tableViewController。
【问题讨论】:
【参考方案1】:当用户开始在表格视图上拖动时,您可以通过在表格视图控制器上将isModalInPresentation
设置为true
来禁用pull-to-dismiss 行为,然后在他们停止拖动时将其重置回false
,就像这样:
class YourTableViewController: UITableViewController
override func scrollViewWillBeginDragging(_ scrollView: UIScrollView)
isModalInPresentation = true
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
isModalInPresentation = false
请注意,您仍然可以稍微拉下您的表格视图控制器,但至少您不能完全关闭它。由于在拖动停止时该值设置回false
,因此您可以通过下拉导航栏来关闭。
此外,如果您将UIRefreshControl
添加到您的表格视图中,它会在下拉表格视图时禁用拉到关闭行为。
【讨论】:
感谢您的建议。 scrollView 委托对我不起作用,但添加刷新控件是完美的。只需将刷新控制目标设置为 endRefreshing 并将 refreshControl 色调颜色设置为 .clear。完美运行。不确定 isModalInPresentation = true 是否由于嵌套在容器中而无法正常工作,但无法使其正常工作 嗯,奇怪的是滚动视图委托方式不起作用。我将表格视图控制器嵌套在导航控制器中,它仍然可以工作(尽管就像我说的那样,它仍然可以有点被拉下来,只是不能一直拉下来)。以上是关于ios13防止下拉滚动到顶部的tableView以消除以模态方式呈现的viewController [重复]的主要内容,如果未能解决你的问题,请参考以下文章