首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我的滚动视图不在最左边时,如何防止UINavigationController识别滑动?

当滚动视图不在最左边时,可以通过以下方法防止UINavigationController识别滑动:

  1. 禁用滑动手势:可以通过设置UINavigationController的interactivePopGestureRecognizer属性的enabled属性为false来禁用滑动手势。这样,无论滚动视图在哪个位置,都不会触发导航控制器的滑动返回功能。
  2. 自定义滑动手势冲突:可以通过实现UIGestureRecognizerDelegate协议中的gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)方法,来自定义滑动手势的冲突判断。在该方法中,可以判断滚动视图的偏移量,当滚动视图不在最左边时,返回false,表示不与导航控制器的滑动手势同时识别。

以下是一个示例代码:

代码语言:swift
复制
class ViewController: UIViewController, UIGestureRecognizerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置导航控制器的interactivePopGestureRecognizer的delegate为当前视图控制器
        navigationController?.interactivePopGestureRecognizer?.delegate = self
    }
    
    // 实现UIGestureRecognizerDelegate协议中的方法
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        // 判断是否为导航控制器的滑动手势
        if gestureRecognizer == navigationController?.interactivePopGestureRecognizer {
            // 判断滚动视图的偏移量
            if scrollView.contentOffset.x > 0 {
                return false
            }
        }
        return true
    }
}

这样,当滚动视图不在最左边时,导航控制器的滑动手势将不会被识别,从而防止滑动返回的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及在滚动中返回上层视图导致应用崩溃。...为 NavigationStack 添加一个屏蔽手势前景视图,以确保用户只能在 showSheet 为否通过滑动返回到上一层视图。...当视图正在滚动返回上一层视图会导致应用崩溃这是一个由 xiaogd 在我 Discord 论坛中提出 问题。...请至少进入第三级视图滚动当前视图视图处于滚动状态,点击 NavigationStack 左上角 “Back” 按钮。

707110

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

众所周知,SwiftUI 是一个响应式框架,这意味着,当数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...(动画结束),立即在屏幕上由左至右滑动,返回上一层视图滑动返回到上一层视图后,应用会锁死。...为 NavigationStack 添加一个屏蔽手势前景视图,以确保用户只能在 showSheet 为否通过滑动返回到上一层视图。...当视图正在滚动返回上一层视图会导致应用崩溃 这是一个由 xiaogd 在我 Discord 论坛中提出 问题[3]。...请至少进入第三级视图 滚动当前视图视图处于滚动状态,点击 NavigationStack 左上角 “Back” 按钮。

34720
  • iOS第三方类库IIViewDeck使用方法

    先看一下效果图: 首先是主视图,也就是中间视图: image.png 上方是Navbar,左边有一个按钮用来开启左边视图,当然左右视图都是可以通过左右滑动来开启,中间Label显示这是哪里界面...再看左侧界面出现样子: image.png 可以看到,左边界面会出现并占据左边部分界面,同时保留原中间视图一部分,另一部分被挤出去了,当然左边界面也没有显示完全。...self.window.rootViewController = self.deckController; 这样就是一个简单ViewDeck了,拥有左右抽屉,可以滑动出现,再滑回到中间视图...对ViewDeck控制器设置一个值就可以了: //设置当滑动到左右边,中间视图对点击响应 //1.默认设置,点击中间界面不会返回中间界面,中间界面控件有响应 // self.deckController.centerhiddenInteractivity...如下: //设置左边视图显示宽度 self.deckController.leftSize = self.window.frame.size.width - (250); 对右侧设置也是一样

    63920

    iOS开发常用之网络

    ZWSlideViewController - ZWSlideViewController多页滑动视图控制器,可以用简单继承方法使用,也可以不用继承,只用菜单或主视图页面,可实现丰富定制,可以使用在多种不同形态...仿LOL滚动视图 - 仿LOL滚动视图。 答案选择切换页 - 将scrollview和tableview封装在一起,在初始时候简单将数据带上,就可以一页一页左右来回滑动。...侧滑与右滑返回手势 SloppySwiper - iOS系统自带UINavigationController要7.0才支持,但不过该手势只能从屏幕左侧边缘识别,如果要扩大到整个屏幕范围怎么办?...安装简便,高度定制且对手势识别良好。可以当做一个标准控件用在iOS SDK中。 SwiftPages - 高可定制类似Instagram视图滑动切换功能类.API简单,易用。...KYAnimatedPageControl - 除了滚动视图PageControl会以动画形式一起移动,点击目标页还可快速定位。支持两种样式:粘性小球和旋转方块。

    23.6K10

    你可能需要为你 APP 适配 iOS11

    4、UINavigationController滚动交互 滚动时候,以下交互操作都是由UINavigationController负责调动: 所以,如果你使用navigation bar,组装push...directional layout margins属性说明如下: 例子:当你设置了trailing = 30;当在一个right to left 语言下trailing值会被设置在view左边...新特性 1、 Scroll Views 如果有一些文本位于UI滚动视图内部,并包含在导航控制器中,现在一般navigationContollers会传入一个contentInset给其顶层viewController...个数再加上几个,滑动,tableView不停地得到新cell,更新自己contenSize,在滑到最后时候,会得到正确contenSize。...滑动操作这里还有一个需要注意是,当cell高度较小时,会只显示image,不显示title,当cell高度够大,会同时显示image和title。

    2.5K00

    你可能需要为你 APP 适配 iOS 11

    ;iOS 11 新增属性 UINavigationController滚动交互 滚动时候,以下交互操作都是由UINavigationController负责调动: UIsearchController...例子:当你设置了trailing = 30;当在一个right to left 语言下trailing值会被设置在view左边,可以通过layout marginsleft属性读出该值。...UIScrollView and UITableView新特性 Scroll Views 如果有一些文本位于UI滚动视图内部,并包含在导航控制器中,现在一般navigationContollers会传入一个...contentInset给其顶层viewControllerscrollView,在iOS11中进行了一个很大改变,不再通过scrollViewcontentInset属性了,而是新增了一个属性...个数再加上几个,滑动,tableView不停地得到新cell,更新自己contenSize,在滑到最后时候,会得到正确contenSize。

    1.7K60

    你可能需要为你APP适配iOS11

    UINavigationController滚动交互 滚动时候,以下交互操作都是由UINavigationController负责调动: 所以,如果你使用navigation bar,组装push...directional layout margins属性说明如下: 例子:当你设置了trailing = 30;当在一个right to left 语言下trailing值会被设置在view左边...新特性 Scroll Views 如果有一些文本位于UI滚动视图内部,并包含在导航控制器中,现在一般navigationContollers会传入一个contentInset给其顶层viewController...个数再加上几个,滑动,tableView不停地得到新cell,更新自己contenSize,在滑到最后时候,会得到正确contenSize。...滑动操作这里还有一个需要注意是,当cell高度较小时,会只显示image,不显示title,当cell高度够大,会同时显示image和title。

    82120

    iOS透明导航栏平滑过渡(进阶版)引实现过程结

    首先我们遍历打印出UINavigationBar所有子视图,是所有,包括子视图一层层子视图,来看看到底导航栏都包含了哪些东西: 上面这张图就是导航栏UINavigationBar所包含所有子view...,下面这种方法是比较好方法: // 对导航栏下面那条线做处理 self.navigationBar.clipsToBounds = alpha == 0.0; 当我们对导航栏透明度设为 0 ,就会隐藏细线...现在实现了比较好透明导航栏效果,但在透明导航栏与不透明导航栏界面直接切换,导航栏透明度是直接跳变: 而我们想要是像QQ一样从完全透明到不透明之间有一个随着滑动手势变化透明度渐变效果,...我们需要随着手势滑动返回界面的进度,来实时变化导航栏透明度,比如滑动到了界面一半时候,导航栏透明度应该是 0.5。对于这个需求,首先想到是,我们要监控这个滑动事件滑动进度。...,我们可以在 UINavigationController Delegate 中添加一个处理,监控松手后自动完成返回还是取消返回操作,同时使用 UIView 动画(关于 UIView 动画可以看我这篇文章

    3.1K40

    iOS 自定义转场动画

    containerView,要做转场动画视图就必须要加入containerView上才能进行,可以理解containerView管理着所有做转场动画视图 UIView *containerView...percentComplete]; //完成转场操作 [self finishInteractiveTransition]; //取消转场操作 [self cancelInteractiveTransition]; 3、转场最上层视图控制器需要遵循...同上 3、在push动画之前设置导航控制器转场动画代理,转场最上层视图控制器需要遵循协议,并设置为代理,并实现如下代理方法: /...; // 创建全屏滑动手势,调用系统自带滑动手势targetaction方法 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer...是began还是fail,同时判断scrollView位置是不是正好在最左边 if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan

    1K90

    iOS 自定义转场动画

    containerView,要做转场动画视图就必须要加入containerView上才能进行,可以理解containerView管理着所有做转场动画视图 UIView *containerView...percentComplete]; //完成转场操作 [self finishInteractiveTransition]; //取消转场操作 [self cancelInteractiveTransition]; 3、转场最上层视图控制器需要遵循...同上 3、在push动画之前设置导航控制器转场动画代理,转场最上层视图控制器需要遵循协议,并设置为代理,并实现如下代理方法:...; // 创建全屏滑动手势,调用系统自带滑动手势targetaction方法 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer...是began还是fail,同时判断scrollView位置是不是正好在最左边 if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan

    1.3K50

    iOS学习—— UINavigationController返回按钮与侧滑返回手势研究

    如果一个页面上有多个手势,我们要如何去获取策划手势,并对其进行操作呢?...因为侧滑返回手势事实上是由存在已久UIPanGestureRecognizer来识别并响应,它直接与UINavigationControllerview进行绑定,因此在包含UIScrollView...——bind——  UINavigationController.view   滑动返回无法触发,说明UIScreenEdgePanGestureRecognizer并没有接收到手势事件,也就是说UIScreenEdgePanGestureRecognizer...失效识别,具体设置方法如下: //指定滑动手势在侧滑返回手势失效后响应 [self.tableView.panGestureRecognizer requireGestureRecognizerToFail...,不会隐藏最左边返回箭头backIndicatorImage,而leftBarButtonItem自定义则会使最左边返回箭头消失backIndicatorImage。

    6.7K60

    JS 中 scrollWidth、scrollHeight、scrollLeft 、scrollTop 详解

    3. scrollLeft 和scrollTop 3.1 概念 element.scrollLeft :返回元素左边缘与视图之间距离,这里视图指的是元素内容(包括子元素以及内容)。...我们需要滑动滚动条来查看完整视图,这个时候scrollLeft 和scrollTop就出现了,其实实际项目中我们是需要用到client和scroll这两大属性来自动滑动滚动条,比如来新消息时候,滚动条自动往下滑动到底部以便查看新消息...scrollLeft概念是返回元素左边缘与视图之间距离,我们一步一步理解,首先,如上图所示,当我们没有滑动水平滚动,元素与它内容默认是左上角顶点重合,所以他们之间是没有距离,此刻 scrollLeft...当我们拉动水平滚动,元素与视图就不再是左上角顶点重合了,水平之间是存在距离(按左上角顶点重合计算),可以看到现在scrollLef有了数值,因为没有移动垂直滚动条,因此垂直方向仍然是没有距离。...当我将水平,垂直滚动条都拉到底部,scrollLeft 和 scrollTop 都 分别为116.8 和156.8 ,我设置元素宽高分别为:200 180 ,视图(子元素)宽高分别为:300 320

    2.9K40

    Android无限循环RecyclerView完美实现方案

    首先分为两部分,往左填充或是往右填充,dx为将要滑动距离,如果 dx 0,则是往左边滑动,则需要判断右边边界,如果最后一个itemView完全显示出来后,在右边填充一个新itemView。...看标注3,往右边填充时候需要检测当前最后一个可见itemView索引,如果索引是最后一个,则需要新填充itemView为第0个,这样就可以实现往左边滑动时候无限循环了。...fill方法计算出来,通常情况下都为 dx,只有当滑动到最后一个itemView,并且循环滚动开关没有打开时候才为0,也就是不滚动了。...只有对不可见itemView进行回收,才能做到回收利用,防止内存爆增。...,移除左边不在内容里view if (view.getRight() < 0) { removeAndRecycleView(view, recycler);

    4.9K20

    实现流畅页面切换?日本前端教教你...

    懒加载图片会重新加载 图片在滚动到可显示位置才予以加载,除此之外用一个placeholder来占位 - 这是一种常见优化手段。但是在页面后退时候,图片会重新现实一次,有些违和。...这些问题用一句话总结一下就是「在页面后退时候,之前页面中因为滚动・点击等用户行为所产生DOM变化如何重现」 参考IOS实现 为了看起来像原生app,那么我们最好参考一下原生app实现。...来看看iOSUINavigationController: 图片出处: https://developer.apple.com/documentation/uikit/uinavigationcontroller...UINavigationController通过Navigation Stack来管理View controller,对View进行push/pop: 如果用相同Stack方法来组装页面的话,页面跳转将不会发生...慢慢滑动也是一样 写在最后 为了实现流畅操作体验,LINE漫画做了很多很多尝试,其中基础就是Page Stack。 大家觉得怎么样?

    61210

    iOS 全屏侧滑手势UIScrollViewUISlider间滑动手势冲突

    手势冲突.gif 三、分析解决问题 这些问题很显然,肯定跟iOS事件传递和响应链机制有关系,不了解可以看看这篇文章 史上详细iOS之事件传递和响应机制-原理篇。...是began还是fail,同时判断scrollView位置是不是正好在最左边 if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan...,如果此时touch时间在150ms以内,UIScrollView会认为是拖动自己,从而拦截了event,导致UISlider接收不到滑动event。...但是只要长按住UISlider一会儿再拖动,此时touch时间超过150ms,因此滑动event会发送到UISlider上,然后UISlider再作出响应;设置为NO后,拖动UISlider就可以直接做出响应...在支持全屏侧滑返回UINavigationController子类WSLNavigatioController中,遵守协议,实现如下方法:

    4.1K20

    如何使用小程序视图容器组件

    视图容器组件 小程序视图容器组件分为五个组件,分别为负责普通显示view组件、负责可滚动视图区域scroll-viel组件,负责滑块视图容器swiper组件、可以触发移动movable-area组件...upper-threshold Number 50 距顶部/左边多远(单位px),触发 scrolltoupper 事件 lower-threshold...设置哪个方向可滚动,则在哪个方向滚动到该元素 scroll-with-animation Boolean false 在设置滚动条位置使用动画过渡...滚动到顶部/左边,会触发 scrolltoupper 事件 bindscrolltolower EventHandle 滚动到底部/右边,会触发 scrolltolower...,如果x不在可移动范围内,会自动移动到可移动范围;改变x值会触发动画 y Number / String 定义y轴方向偏移,如果y不在可移动范围内,会自动移动到可移动范围

    9.6K10377
    领券