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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS: 悬浮的条件筛选下拉框的使用

UITableView deleterows 滚动到顶部

添加新数据时,Tableview 会滚动到顶部。无限滚动

iOS滚动视图禁用自动滚动到顶部

按下窗口上部时防止Ios设备滚动到顶部

UITableView 在 iOS 的头号问题上滚动