【问题标题】:ios13 prevent pulling down on tableView which is scrolled to top from dismissing sheet style modally presented viewController [duplicate]ios13防止下拉滚动到顶部的tableView以消除以模态方式呈现的viewController [重复]
【发布时间】:2019-11-02 23:10:38
【问题描述】:

我有一个 tableViewController,它以默认的表单样式呈现模式呈现。

我想保留这种模态样式,因为它看起来不错并且在我的应用中运行良好。我喜欢下拉导航栏时的解雇。但是我不想要的是在 tableView 已经滚动到顶部时拉下 tableView 单元格以导致 tableViewController 被关闭。

是否有抑制这种行为但保持工作表样式模式表示的方法?我希望 tableView 上的下拉保持垂直反弹效果,并且只能通过下拉导航栏部分来通过 pan 关闭模态呈现的 tableViewController。

【问题讨论】:

    标签: ios swift uitableview presentmodalviewcontroller


    【解决方案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 是否由于嵌套在容器中而无法正常工作,但无法使其正常工作
    • 嗯,奇怪的是滚动视图委托方式不起作用。我将表格视图控制器嵌套在导航控制器中,它仍然可以工作(尽管就像我说的那样,它仍然可以有点被拉下来,只是不能一直拉下来)。
    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多