iOS - UINavigationController简介

一、简介

iOS中以栈的形式保存子控制器,如下图

nav栈.png

导航控制显示的永远是我们栈顶控制器的view

二、 简单使用

简单的创建方式

UIViewController*vc = [[UIViewControlleralloc] init];UINavigationController*nav = [[UINavigationControlleralloc] initWithRootViewController:vc];self.window.rootViewController = nav;

三、底层实现

这里讲一下 navigation 底层的实现逻辑,其实就是解释这行代码的逻辑:

UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:vc];

底层系统默认的调用了push方法将我们的vc设置成为栈底跟视图。

四、层次结构

我们来看看 navigationcontroller 的层次结构

当我们将一个控制器装入一个 navigationcontroller 并设为跟控制器之后,就会看到层次中多了一个 UILayoutContainerView 中包含了连个视图,一个是UINavigationTransitionView、一个是UINavigationBar视图。UINavigationTransitionView 装载的就是当前栈顶控制器所承载的视图,UINavigationBar 就是我们的导航栏视图。

nav1.png

nav2.png

nav3.png

五、注意事项

前方高能:automaticallyAdjustsScrollViewInsets这个属性默认将controller上所有的scrollView都向下偏移64,由于笔者被其所坑,找了三天bug才找出它来,所以一定要慎用此属性。

在iOS7之后,系统默认会给导航控制器中所有的UIScrollVIew的顶部添加额外的滚动区域64,消除方法:

self.automaticallyAdjustsScrollViewInsets =NO;

设置导航条透明方法:其实是设置导航条内的背景图片的颜色是透明的

[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];

设置导航条阴影背景,也是设置图片:

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容