iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem... 导航控制器是一个堆栈结构,只是其中管理的对象是controller,通过push与pop进行controller的切换,我们有两种方式可以创建导航控制器: //通过一个自定义的导航栏和工具栏创建导航控制器...; //屏幕滑动的时候隐藏导航栏,常用于tableView,上滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe...; //横屏的时候隐藏导航栏 @property (nonatomic, readwrite, assign) BOOL hidesBarsWhenVerticallyCompact; //敲击屏幕可以隐藏与显示导航栏...; //push的时候隐藏底部栏,如push后隐藏tabbar @property(nonatomic) BOOL hidesBottomBarWhenPushed; //管理它的导航控制器 @property
目录: 一、设置导航栏样式 二、解决自定义导航栏返回按钮后侧滑不可用问题 三、隐藏导航栏底部的分割线 四、导航栏引起的布局问题 相关文章:iOS状态栏的使用总结 一、设置导航栏样式 设置导航栏的样式可分为全局设置与局部设置...导航栏视图层级图 从图中可以看出,导航栏的底部分割线是一个UIImageView对象,而且高度只有0.5,所以我们可以据此获取到导航栏的底部分割线对象,在一个视图控制器中实现此需求,代码如下: #import...,用于优化滑动类视图(继承于UIScrollView的视图)在视图控制里的显示: iOS系统的导航栏UINavigationBar与标签栏UITabBar默认都是半透明模糊效果,在这种情况下系统会对视图控制器的...我们可以通过一段代码来测试一下效果,在默认导航栏(半透明)的视图控制器里添加如下代码: //UITextView是滑动视图,内容自动向下偏移,不会被导航栏覆盖 UITextView *leftTextView...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航栏和标签的存在,布局时若设置其原点设置为(0,0),视图会延伸显示到导航栏的下面被覆盖。
导航控制器自动构建并处理Back按钮; 3. 导航控制器提供简单的菜单栏可帮助用户进行自定义控件。4....使用pushViewController: animated:可推入一个新的控制器,从而增加新的项到导航栈。(记住:导航栏控制器不添加一个视图进去,这个导航栏是没有意义的!)...作为弹出回上一级视图控制器的Back按钮是自动产生并处理的,无需用户干预。 3. 可使用popViewControllerAnimated:BOOL弹出当前视图控制器并向左显示前一个视图。 4....可使用popToRootViewControllerAnimated:BOOL直接弹出到根视图控制器。 6. 设置导航栏的按钮并不是去设置导航栏本身。...)和栏标题(title)、用于显示标题的视图(titleView),以及用于从当前视图向后导航的Back按钮(backBarButtonItem)和隐藏后退按钮(hidesBackButton)。
,即不是使用push方式加载子VC,而是通过AddChildViewController的方式添加的场景,则父级导航条会覆盖在子级导航条上面,所以需要在载入时把父级导航条做隐藏处理: 1.2 navigationItem...--(二十四)-iOS7View被导航栏遮挡问题的解决 http://www.cnblogs.com/PleaseInputEnglish/p/3498032.html 2.5.2 导航条设置为半透明... 将NavigationBar设置透明(仅将指定视图控制器进行透明处理),步骤如下: 1.在视图控制器的头文件中实现UINavigationControllerDelegate,例如...{ //进入其他视图控制器 self.navigationController.navigationBar.alpha = 1; //背景颜色设置为系统默认颜色...[self.navigationItem setHidesBackButton: YES]; 2.5.5 设置导航栏标题的字体颜色和大小 方法一:(自定义视图的方法,一般人也会采用这样的方式)
*barHideOnSwipeGestureRecognizer; 10、屏幕滑动的时候是否隐藏导航栏,常用于tableView,上滑隐藏导航栏,下滑显示,带动画效果 @property (nonatomic...的时候隐藏底部栏,如push后隐藏tabbar @property(nonatomic) BOOL hidesBottomBarWhenPushed; (3)获取管理它的导航控制器 @property(...(1)通过一个自定义的导航栏和工具栏创建导航控制器 - (instancetype)initWithNavigationBarClass:(nullable Class)navigationBarClass...toolbarClass:(nullable Class)toolbarClass; (2)使用系统默认的导航栏和工具栏,创建一个导航控制器同时设置一个根视图控制器 - (instancetype)initWithRootViewController...*> *)viewControllers animated:(BOOL)animated; 3、管理视图控制器操作 (1)压入新的视图控制器 - (void)pushViewController:(
目录: 一、状态栏与导航栏 二、设置状态栏显隐与字体样式 三、设置状态栏背景色 四、启动页隐藏状态栏 五、状态栏、导航栏相关的常用宏定义 相关文章:iOS导航栏的使用总结 一、状态栏与导航栏 状态栏...((44) iPhoneX设备出现以后,状态栏的高度变为44,导航栏部分总高度(88) = 状态栏(44) + 导航栏内容高度(44) 二、设置状态栏显隐与字体样式 iOS状态栏可以设置显示和隐藏,也可以设置文字的颜色...此时全局设置的操作都是无效的,需要分页设置才能修改其样式,即:在每个视图控制器或者控制器基类中使用如下代码: - (UIStatusBarStyle)preferredStatusBarStyle {...//return NO; //设置状态栏显示 } 但是,这里存在一个问题:如果当前视图控制器是UINavigationController的子视图控制器,preferredStatusBarStyle...这是因为导航控制器里的preferredStatusBarStyle才具有修改状态栏样式的能力,解决这个问题的方法有两种: 方法1:添加子类导航控制器 我们需要使用自定义的子类导航控制器,在其中添加如下的代码
iOS 7以前 在iOS 7之前,状态栏是不占视图位置的。每个控制器中的根view都是从屏幕的Y轴20px处开始显示的。...plist设置 然后在视图控制器中,重写如下三个方法即可: ?...例如,我想要在这个界面时状态栏为白色,状态栏不隐藏,那么我只用重写-preferredStatusBarStyle,like this: - (UIStatusBarStyle)preferredStatusBarStyle...情形二 状态栏的样式、是否显示实际上是由顶层window的当前视图控制器决定的。...window和其根视图控制器的背景色必须为clearColor。
当键盘被唤起、用户使用了手势、或者当前视图变为竖屏的情况下,导航栏可以隐藏。...在用户需要专注于内容的时候,可以考虑隐藏导航栏。当你这么做的时候,请确保用户通过一个简单的手势(比如一下轻击)即可重新唤起导航栏。 ?...请注意,当搜索的视图控制器包含在导航控制器里面的时候——比如在邮件应用(Mail)中那样,当用户激活搜索时,搜索栏会自动上浮,平铺到原来导航栏的位置上。...如果需要的话,设计一种自定义的方式让用户可以以非线性的方式来获取内容。页面视图控制器让用户从一页移动到前一页或者后一页,而并不支持用户在并不相邻的页面间快速切换。...默认情况下,竖屏方向时只会展示右侧窗格,因此你需要向用户提供一个按钮(通常位于导航栏上)来让用户唤起和隐藏主窗格。对分视图控制器也支持轻扫手势来执行呼出和隐藏的动作。
大家好,又见面了,我是全栈君 (1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navigationBar...须要创建两个视图控制器(ViewController根视图控制器,SecondViewController子视图控制器),然后放在导航控制器栈中。...隐藏导航条,由此点击进入其它视图时导航条也会被隐藏。...,所谓跳转,事实上就是往导航控制器栈中PUSH或者POP一个视图控制器,这样在最上面的视图控制器就变了,这样视图也跟着变了,由于仅仅显示在栈顶得那个视图控制器的视图 //所以(1)控制所谓的跳转...事实上是导航控制器在控制,在里面的元素都能够通过navigationController属性获取到它们所在的导航控制器 //所以(2)获取到导航控制器之后,使用Push的那个方法,往栈里面放一个视图控制器
大家好,又见面了,我是你们的朋友全栈君。...标题设置 self.navigationItem.title = @"标题"; 复制代码 正常情况下,控制器的标题会默认作为导航标题 前景色 self.navigationController.navigationBar.barTintColor...,意为不使用控制器管理状态栏。...; }else{ [self.navigationController setNavigationBarHidden:NO animated:YES]; } 复制代码 注意:两种方法都是可以隐藏导航栏的...但是如果用navigationBar.hidden隐藏导航栏,我们可以继续使用navigationBarHidden提供的滑动pop效果,如果用navigationBarHidden,这个操作将无效;但前者
分割控制器UISplitViewController 功能:它也是ipad的一个新特性,在屏幕上可以同时显示两个控制器,左边一个,右边一个;左边的为主控制器,右边的为详细控制器,主控制器可以根据需要显示或隐藏...它对于iPhone虽然可以使用,但是不具备同时显示的特点,在iPhone的样式,就是导航控制器切换的模式。...: 在故事板布局的样式截图为: 下面我们就通过纯代码的方式创建如下: 1、创建两个控制器类,一个为主控制器类MasterViewController,一个为详细控制器类DetailViewController...Master的导航栏和按钮,并设置表格视图的数据源和代理 - (void)viewDidLoad { [super viewDidLoad]; //创建UITableView...Master的导航栏和按钮 self.navigationItem.title = @"Master"; self.navigationItem.leftBarButtonItem =
: 实现: 要实现这个简单的有无导航栏过渡其实很简单,直接在 viewWillAppear 和 viewWillDisappear 方法中对导航栏进行显示和隐藏就可以了,为了到达比较平滑的效果,建议对是否动画的参数选择...,在通过Tabbar切换模块时就会出现一个很快的隐藏导航栏的动画,这个很烦,我尝试了很多方法,试图在 UINavigationControllerDelegate 和 UITabBarControllerDelegate...这个方法是直接隐藏了整个导航栏,所以如果要保存导航栏的一些返回按钮以及其他自定义的按钮,就需要自己在界面上去模拟添加,如果不想这么麻烦,也可以不隐藏导航栏,而是将导航栏的背景视图设为透明的: [...结 上面的方法可以在只有导航栏控制器时比较好的操作,虽然不能做到像QQ那么好,但也能用,但如果有Tabbar存在,就会有问题。那如何做到QQ那样的效果呢?...这里有一篇文章实现了:传送门:导航栏的平滑显示和隐藏 - 个人页的自我修养(1) ,不过作者使用swift实现的,用到了extension,其实也就是OC下的category,之后我再研究一下OC下的实现好了
侧滑菜单因Path 2.0和Facebook为开发者熟知,国内目前也有很多流行app用到了侧滑菜单,比如QQ、网易邮箱、知乎等等。...IOS官方并没有提供类似于侧滑栏之类的组件,所以我们需要自己写一个侧滑栏控件,为了不要重复造轮子,我在github上找到了一个使用简单方便,新手容易入手的侧滑菜单控件,Demo下载地址:这是一个我的iOS...下面我们就是使用上面的控件,来做一个侧滑栏的小Demo,来教大家快速入门侧滑栏控件。...在viewDidLoad方法中设置SWRevealViewController中的panGestureRecognizer方法,即可实现在主界面上滑动就可以出现左侧或者右侧菜单。...你的支持是我继续的动力。 下篇文章预告:iOS动画的总结 文章来源于网络,如有侵权,请联系小编删除。
交互控制器 – 这个类是用来管理交互的-那些通常由某个手势空控制的交互,允许用户通过滑动,轻扫或执行其他操作来实现两个视图控制器的导航.必须指出的是,交互控制器允许导航取消,例如,一个用户可以在正在导航至某一页面时...使用动画控制器 AnimationControllers 文件夹中提供了许多可以整合进你的工程中的动画控制器: 自定义模态控制器显示/隐藏的动画 UIViewControllerTransitioningDelegate...协议被用来在模态控制器显示/隐藏时提供一个动画控制器.当一个视图控制器被模态显示或隐藏时,它的transitioningDelegate属性用来提供UIViewControllerTransitioningDelegate...交互控制器负责给视图添加手势,并负责在用户使用某个手势时进行相应地导航操作...._interactionController : nil; } 用于标签栏控制器切换时的交互 UITabBarControllerDelegate 协议也为交互式转场提供了支持.但是由于代理方法在首次初始化时不被执行
在入口类中全局设置就可以达到统一导航栏颜色的效果。 ...上面设置的为YES,下面的为NO 关于导航返回: 首先ios7 之后只要使用系统自带的导航效果就有手动滑动返回的效果。但是当自定义返回按钮时,这种手动滑动返回的效果就没有了。...navigationItem navigationItem是UIViewController的一个属性,包含了当前页面导航栏上需要显示的全部信息,这个属性是为UINavigationController...每个视图控制器都有一个navigationItem属性,navigationItem中设置的做按钮、右按钮、标题等,会随着控制器的显示,也显示到navigationBar上 我们来看一下这些名词是什么意思...形成整个nv的导航栏。
除了上面说到的两点,pop 过程中还需要注意一点,那就是从 B 返回到 A 的过程中,A 视图控制器的 viewDidLoad 方法并不会被调用。...ViewController 视图里的第一个子控件是 UIScrollView 类型的视图。 ViewController 是 navigation 或者 tab 类型控制器的子视图控制器。...,在视图控制器的 viewDidLoad 或者 viewWillAppear: 方法里去设置导航栏样式。...如果真的要隐藏导航栏 如果我们需要隐藏导航栏,请保证所有的 ViewController 能坚持如下原则: 每个 ViewController 只需要关心当前页面下的导航栏是否被隐藏。...转场动画与导航栏隐藏动画的一致性 如果在转场的过程中还会显示或者隐藏导航栏的话,请保证两个方法的动画参数一致。
屏幕快照 2017-07-15 下午1.52.29.png 2.创建标签配置Plist文件,并且在Plist文件中设置视图控制器的类名、Title、标签栏图片等信息 ?...第三步:创建视图控制器 自定义导航控制器和视图控制器的父类,并且创建三个继承于BaseViewController的视图控制器(因为没有过多复杂操作,这里省略代码),为之后创建标签控制器做准备。...NSCoder) { fatalError("init(coder:) has not been implemented") } } 第五步:在Appdelegate中设置Window的根视图控制器为自定义的标签控制器...makeKeyAndVisible() //设置Window的根视图控制器为自定义的标签栏 self.window?....在项目前期我们以自定义的方式来创建标签栏,这也是为了后期应对更加复杂的需求做伏笔,比如增加新的控制器我们只需要修改plist配置文件的属性创建相应的视图控制器就可以,这样就避免了修改大量代码。
内容 当显示一个新的屏幕时,一个后退按钮(通常标有前一个屏幕的标题)出现在该bar的左侧。...split view(分割视图) ·Navigation Bars是半透明的,可以具有背景色,并且可以配置为当键盘出现在屏幕上 / 使用手势 / 视图大小调整时隐藏。...照片在查看全屏照片时会隐藏navigation bar和其他界面元素。 如果你实现这类行为,让用户用简单的手势恢复导航栏,如点击。...替代 在不需要导航时使用toolbar,或者需要多个控件来管理内容。 ---- 导航栏标题(Navigation Bar Titles) 考虑在navigation bar中显示当前视图的标题。...·考虑在导航栏中使用segmented control来压平应用程序的信息层次结构。
这个阶段会加载一些高开销的操作,例如:键盘弹出、特殊的过程动画(比方说修改状态栏、导航条颜色等等)这些。...iOS7新增加了导航控制器侧滑手势,当触发侧滑返回时,会调用系统的viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法。...5_0); 在四个方法中: isMovingFromParentViewController 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器的视图的隐藏是否因为视图控制器从它的容器视图控制器移除...isBeingDismissed 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器的视图的隐藏是否因为视图控制器被清退 (dismissed...,与上面被其它视图控制器显示对应,如信息录入完成,返回之前的视图控制器)。
:(BOOL)animated; //回到根控制器(栈底控制器) - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 如何修改导航栏的内容...导航栏的内容由栈顶控制器的navigationItem属性决定 UINavigationItem有以下属性影响着导航栏的内容 //左上角的返回按钮 @property(nonatomic,retain...retain) UIBarButtonItem *rightBarButtonItem; 清空导航条背景图片 // 清空导航条背景图片,系统判断当前是否为Nil,如果为nil,系统还是会自动生成一张背景图片...iOS7之后导航条上德图片默认会渲染成蓝色 代码改变图片原始颜色 获得导航栏上图片 self.navicationItem.rightBarButtonItem.image; image];...(来源控制器) 新建并且设置Segue对象的destinationViewController(目标控制器) 页面跳转前的操作 调用sourceViewController的下面方法,做一些跳转前的准备工作并且传入创建好的
领取专属 10元无门槛券
手把手带您无忧上云