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

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

既然有透明的导航栏也有不透明的导航栏,那一定会在界面切换之间存在一个过渡的过程,而这个过程,QQ做的特别好,在从透明导航栏界面返回到不透明导航栏界面时,导航栏的透明度是一个渐进的过渡效果,甚至会有一种毛玻璃的效果...而很多App的做法其实比较粗糙,类似于我在传送门:iOS导航栏切换界面时隐藏和显示中的做法,需要导航栏透明时,直接将导航栏隐藏起来。...同时,我们虽然说QQ做的很好,但也依然有一些不足,多把玩一下导航栏过渡的过程就会发现,如果准备从透明导航栏返回时又决定不反回了,还是停留在导航栏透明的界面,这时候导航栏虽然会回到透明,但会有一个导航栏闪现一下的小瑕疵...这样每个 ViewController 都可以管理自己的导航栏透明度,在这个新增属性的setter方法中,我们调用前面在在 UINavigationController 的Category 中添加的设置导航栏透明度的方法...,我们可以在 UINavigationController 的 Delegate 中添加一个处理,监控松手后时自动完成返回还是取消返回操作,同时使用 UIView 动画(关于 UIView 动画可以看我的这篇文章

3.1K40

UINavigationController 导航控制器概念属性方法

概念 UINavigationController 继承于 UIViewController 包含:viewcontrollers、NavigationBar、Toolbar 导航控制器是一个堆栈结构,...只是其中管理的对象是controller,通过push与pop进行controller的切换,UINavigationController是将这些控件(UINavigationBar,UINavigationItem...Class)navigationBarClass toolbarClass:(nullable Class)toolbarClass; (2)使用系统默认的导航栏和工具栏,创建一个导航控制器同时设置一个根视图控制器...:(BOOL)animated { // 这里的参数viewController就是即将被push进来的控制器 viewController.hidesBottomBarWhenPushed...= YES; [super pushViewController:viewController animated:animated]; } (2)弹出一个视图控制器 返回的是pop的controller

2.2K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Cocoa编程中视图控制器与视图类详解

    C代码   //创建一个导航控制器 UINavigationController *aNav = [[UINavigationController alloc] init];   //创建一个要被推入的视图控制器...;   提示:UIViewController 有一个属性是navigationController,如果当前ViewController在某个NavigationController的堆栈中 的话(即是被推送过来的...在发送presentModalViewController: animated:消息后,一个新的视图控制器(其实是个ModalViewController)会滑动到屏幕并掌握控制权,直到使用dismissModalViewControllerAnimated...向不同的视图同时提供一次单击访问,向用户选择的屏幕和编辑底栏的屏幕同时提供More按钮。      ...不过,也可以视具体情况,我们直接在一个独立的视图控制器中创建UITabBarController实例对象,如自定义一个用于视图 切换的控制器类ViewSwitcherViewController,就可在其中的

    5.1K50

    iOS右滑返回的实现【修订】

    (gestureRecognizer == self.interactivePopGestureRecognizer) { //屏蔽调用rootViewController的滑动返回手势...当 interactivePopGestureRecognizer.enabled = NO 或者当前UINavigationController堆栈的viewControllers小于2的时候此方法无效...方法将手势返回强制加回来 2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法的类,第二个参数是方法的...下方的IMP其实就是Implementation的方法缩写,获取到相应的方法实现后,然后再调用class_addMethod()方法将IMP与SEL进行绑定即可。...自定义导航条的rightBarButtonItem,采用initWithCustomView:rightBtn设置rightBtn.frame,让文字更大,更容易点击 https://kunnan.blog.csdn.net

    1.7K20

    iOS - 实现UINavigation全屏滑动返回(一)

    要点 interactivePopGestureRecognizer 是UINavigationController自带手势,当我们自定义了导航条的返回按钮后,这个手势就自动失效了,也就是说无法滑动返回...条件 很多情况下我们不得不自定义导航条的返回按钮,但是我们也要滑动返回上一级的效果。 思路 既然自动失效,那我们就告诉它什么时候生效。...苹果官方文档说明 翻译:第一个被添加的控制器成为永远不会被出栈的根控制器 步骤 自定义一个 UINavigationController ,即继承于 UINavigationController...*)viewController animated:(BOOL)animated { // 根据 栈 先进后出 if (self.viewControllers[0] == viewController...只有左侧边缘滑动才有效 附上Demo 最后说两句 这样就可以了,但是注意了,现在实现的是滑动返回功能,并没有全屏滑动返回~~接下来看下一篇吧 iOS - 实现UINavigation全屏滑�动返回(二

    1K20

    iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言         在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem...和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便...controller的管理         导航控制器是一个堆栈结构,只是其中管理的对象是controller,通过push与pop进行controller的切换,我们有两种方式可以创建导航控制器: /...:(UIViewController *)viewController animated:(BOOL)animated; //弹出一个视图控制器 返回的是pop的controller - (nullable...) BOOL hidesBarsWhenKeyboardAppears; //屏幕滑动的时候隐藏导航栏,常用于tableView,上滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic

    1.8K20

    UI篇-UINavigationController之易忘补充

    导航高度修改为0 ?...上面设置的为YES,下面的为NO 关于导航返回:     首先ios7 之后只要使用系统自带的导航效果就有手动滑动返回的效果。但是当自定义返回按钮时,这种手动滑动返回的效果就没有了。...UINavigationController是一个viewController UINavigationBar是一个view UINavigationItem是一个NSObject UIBarButtonItem...,通过设置 self.navigationController.toolbarHidden = NO来显示工具栏,工具栏中的内容可以通过viewController的toolbarItems来设置,显示的顺序和设置的...NSArray中存放的顺序一致,其中每一个数据都一个`UIBarButtonItem`对象,可以使用系统提供的很多常用风格的对象,也可以根据需求进行自定义,`每个UIBarButtonItem可以绑定一个事件

    2.2K20

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

    导航栏左上角的back按钮是附着在UINavigationController的UINavigationBar里自带的一个返回按钮,导航栏自带的back按钮的图层结构如下图所示。...,我们一般是采用的UITabBar + UINavigationController架构,对于每一个UITabBar的item模块,我们都定义一个UINavigationController对该item...有效的,所以一旦你在某个界面禁用了侧滑,那么该UINavigationController控制下的所有viewController都会禁用侧滑,这显然是不合理的。...提供一个解决方案就是在进入viewController时 - (void)viewDidAppear:(BOOL)animated; 中禁用侧滑手势,然后在离开viewController时 - (void...,所以如果一个viewController钟有UIScrollView及其子类的view时,侧滑手势影响用户体验效果,此时用户将无法通过侧滑进行返回。

    6.9K60

    iOS右滑返回的实现(interactivePopGestureRecognizer)

    I 、添加右滑返回手势 若项目有全局的UINavigationController基类,给页面添加右滑返回手势 @implementation NavigationController - (void...(gestureRecognizer == self.interactivePopGestureRecognizer) { //屏蔽调用rootViewController的滑动返回手势...当 interactivePopGestureRecognizer.enabled = NO 或者当前UINavigationController堆栈的viewControllers小于2的时候此方法无效...方法将手势返回强制加回来 2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法的类,第二个参数是方法的...下方的IMP其实就是Implementation的方法缩写,获取到相应的方法实现后,然后再调用class_addMethod()方法将IMP与SEL进行绑定即可。

    3.3K20

    iOS小技能:右滑返回

    基于全局的UINavigationController基类实现 若项目有全局的UINavigationController基类,给页面添加右滑返回手势 @implementation NavigationController...(gestureRecognizer == self.interactivePopGestureRecognizer) { //屏蔽调用rootViewController的滑动返回手势...方法将手势返回强制加回来 2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法的类,第二个参数是方法的...下方的IMP其实就是Implementation的方法缩写,获取到相应的方法实现后,然后再调用class_addMethod()方法将IMP与SEL进行绑定即可。...自定义导航条的rightBarButtonItem,采用initWithCustomView:rightBtn设置rightBtn.frame,让文字更大,更容易点击 https://kunnan.blog.csdn.net

    2.3K30

    03_iOS导航栏的正确隐藏方式

    简介 在项目中经常碰到首页顶部是无限轮播,需要靠最上面显示.有的设置导航栏为透明等一系列的方法,这个可以借助第三方.或者干脆简单粗暴的直接隐藏掉导航栏.可是push到下一个页面的时候是需要导航栏的,如何做了...第一种做法 注意这里一定要用动画的方式隐藏导航栏,这样在使用滑动返回手势的时候效果最好,和上面动图一致.这样做有一个缺点就是在切换tabBar的时候有一个导航栏向上消失的动画. - (void)viewWillAppear...,实现代理方法,在将要显示控制器中设置导航栏隐藏和显示,使用这种方式不仅完美切合滑动返回手势,同时也解决了切换tabBar的时候,导航栏动态隐藏的问题。...self.navigationController.delegate = self; } #pragma mark - UINavigationControllerDelegate // 将要显示控制器 - (void)navigationController:(UINavigationController...{ // 判断要显示的控制器是否是自己 BOOL isShowHomePage = [viewController isKindOfClass:[self class]];

    1.3K20

    iOS 自定义转场动画

    模态化present和dismiss 自定义转场 1、创建一个遵循协议的动画过渡管理对象,并实现如下两个方法: //返回动画事件...//必要调用实现的系统方法 //手势过程中,通过updateInteractiveTransition设置转场过程动画进行的百分比,然后系统会根据百分比自动布局动画控件,不用我们控制了 [self...self.transitionInteractive : nil; } return nil; } 全屏侧滑返回 创建一个继承于UINavigationController的一个对象WSLNavigatioController...,就不需要触发滑动手势, return NO; } return YES; } 解决UIScrollView的滑动手势与全屏侧滑手势的冲突 创建一个UIScrollView...是began还是fail,同时判断scrollView的位置是不是正好在最左边 if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan

    1.1K90

    iOS学习——获取当前最顶层的ViewController

    在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController...,或者在最顶层的ViewController上present另一个ViewController,或者进行其他操作。...1 实现思路   通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的rootViewController...在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过...[UIApplication sharedApplication].keyWindow.rootViewController获取到的是项目的根视图,结合可能用到UITabBarController或者UINavigationController

    6.7K50

    大前端开发中的路由管理之四:iOS篇

    容器类ViewController都是通过持有一个ViewController的数组来管理,一般来讲UINavigationController是通过先进后出(First In Last Out)的方式来管理...同时UINavigationController还持有屏幕上方的交互栏(navigationBar)和屏幕下方的工具栏(toolBar),并控制他们是否可见。         ...根据官方的文档,UINavigationController每次只会展示一个ViewController的View,每次进入到一个View的时候会push这个ViewController到navigation...一张图概括NavigationController的结构 3.2 通用的页面切换方式         容器类的ViewController通过一个特定的结构来实现多层级管理,但并不是所有页面都能确保是在同一个容器中...3.4 状态的保存和回溯         从源码中可以发现ViewController实现了一个叫做UIStateRestoring的协议,所以持有一个叫做restorationIdentifier的属性

    1.9K40

    你可能需要为你的 APP 适配 iOS11

    属性,在storyboard中也支持这个设置,对于HUD的image需要设置另一个iOS11新增的属性:largeContentSizeImage,关于这部分更详细的讨论,可以参考 WWDC2017 Session...自从引入layout margins,当将一个view添加到viewController时,viewController会修复view的的layoutMargins为UIKit定义的一个值,这些调整对外是封闭的...safeArea区域如下图所示: 如果有一个自定义的viewController,你可能要添加你自己的bars,增加safeAreaInsets的值,可以通过一个新的属性:addtionalSafeAreaInsets...的新特性 1、 Scroll Views 如果有一些文本位于UI滚动视图的内部,并包含在导航控制器中,现在一般navigationContollers会传入一个contentInset给其最顶层的viewController...滑动操作这里还有一个需要注意的是,当cell高度较小时,会只显示image,不显示title,当cell高度够大时,会同时显示image和title。

    2.5K00

    iOS 自定义 ViewController 过渡动画

    就想着自己也来玩一下,顺便把之前没写成的 Custom ViewController Transition 自定义视图控制器过渡的文章也一起搞定了。...这里只以这个动画的实现为主线,更系统的介绍请移步上面的相关链接。 视图控制器过渡,就是指图片里那种 ViewController 的过渡效果。(好废话。。。)...在上面链接的视频里说到,一共有下面这四个地方可以用自定义过渡: Presentations and dismissals UITabBarController UINavigationController...,例子就是在 NavigationController 的详细页面中从屏幕左侧滑入以返回时的那个动画。...// 可以吧containerView理解成一个舞台,参与过渡动画的角色在这个舞台上表演。。。所以要让他们上台先。

    1.4K31

    你可能需要为你的APP适配iOS11

    属性,在storyboard中也支持这个设置,对于HUD的image需要设置另一个iOS11新增的属性:largeContentSizeImage,关于这部分更详细的讨论,可以参考 WWDC2017 Session...自从引入layout margins,当将一个view添加到viewController时,viewController会修复view的的layoutMargins为UIKit定义的一个值,这些调整对外是封闭的...safeArea区域如下图所示: 如果有一个自定义的viewController,你可能要添加你自己的bars,增加safeAreaInsets的值,可以通过一个新的属性:addtionalSafeAreaInsets...的新特性 Scroll Views 如果有一些文本位于UI滚动视图的内部,并包含在导航控制器中,现在一般navigationContollers会传入一个contentInset给其最顶层的viewController...滑动操作这里还有一个需要注意的是,当cell高度较小时,会只显示image,不显示title,当cell高度够大时,会同时显示image和title。

    82920

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

    属性,在storyboard中也支持这个设置,对于HUD的image需要设置另一个iOS11新增的属性:largeContentSizeImage,关于这部分更详细的讨论,可以参考 WWDC2017 Session...;iOS 11 新增属性 UINavigationController和滚动交互 滚动的时候,以下交互操作都是由UINavigationController负责调动的: UIsearchController...自从引入layout margins,当将一个view添加到viewController时,viewController会修复view的layoutMargins为UIKit定义的一个值,这些调整对外是封闭的...如果有一个自定义的viewController,你可能要添加你自己的bars,增加safeAreaInsets的值,可以通过一个新的属性:addtionalSafeAreaInsets来改变safeAreaInsets...contentInset给其最顶层的viewController的scrollView,在iOS11中进行了一个很大的改变,不再通过scrollView的contentInset属性了,而是新增了一个属性

    1.7K60
    领券