UITabBar和UINavigation组合使用与自定义样式(iOS)

原创 2015年05月11日 16:15:17

UITabBarController和UINavigationController组合使用与自定义样式(iOS)


源代码github地址:https://github.com/zcsoft/ZCTabNav

环境版本:mac 10.10 / ios7+ / xcode 6.3



大部分APP的界面框架都需要UITabBarController和UINavigationController组合使用,自己的很多项目也都是这样的结构。但是一直觉着用的非常混乱,尤其是ios5一路过来到ios8,tabbar和navigationbar的自定义样式已经增加了很多接口,原生控件基本上可以满足大部分人的需求了,所以趁着现在有空,整理了一下自己使用中遇到的各种问题。


完全自定义还是使用系统原生

很久很久以前,系统自带的tabbar和navigationbar可定制能力比较低,所以就用uiview完全自定义的方式去做,而在ios7/8上,系统自带的tabbar和navigationbar已经基本能满足大部分需求了,所以如果不是需求必要,建议优先考虑从系统原生控件上定制。不但节省人力,而且跳转动画效果也还不错。


tabbar和navigation嵌套关系

apple的很多例子都推荐用UITabBarController嵌套UINavigationController,也就是tabor的每个标签都对应一个navigation视图。这样做是比较主流的方法,好处相对也很多,比如:
  某个tabbar的标签视图可以不使用navigation。
  push时是从tab -> navigation中push的,视图结构更符合逻辑。
对于这个做法带来的tabor无法隐藏问题,只要设置被push视图的hidesBottomBarWhenPushed为yes即可。


定制UINavigationBar

navigationBar的定制有很多种方法,比如使用[UINavigationBar appearance]来设置全局的nav样式,或者通过继承UINavigationController来达到自定义的目的。不过,通过[UINavigationBar appearance]方式定制navbar还是有一定局限性,比如只能设置一个back按钮的背景,想修改全局back文本标签也十分不便。而相比继承,这个方式也并没有多少优势。综合考虑,还是使用继承来定制navbar更好一些。不过需要注意,在替换back按钮的时候,如果替换leftBarButtonItem,滑动屏幕边缘返回可能会失效,而设置代理后又会导致应用卡死,具体处理方法还请下载demo查看ZCNavigationController.m文件。^^


定制UITabBar

tabbar的定制和navigationbar很相似,唯一需要注意的地方就是所有定制贴图等都要添加到tabbar视图上,否则会造成设置hidesBottomBarWhenPushed时视图不随tabbar一起隐藏的问题。还有如果自定义按钮等大小超出tabbar的高度,则tabbar上面的那条横线会遮挡住这个视图,需要在viewDidAppear里处理一下视图层次关系。


磨砂玻璃效果

可以通过setTranslucent设置磨砂玻璃效果,这个属性并没有多么神秘,如果设置了此效果,所有滚动视图或其子视图都会都会被自动处理滚动边界和透明位置(需要添加滚动视图到控制器视图的最底层),而其他类型视图的位置则要做相应的偏移。多做一些demo,看看文档,还是比较容易掌握的。
不过我遇到了一个问题,当设置navigationbar.translucent=yes;时,如果刚好也设置了hidesBottomBarWhenPushed=yes,那么push动画时,navigationbar的右上角会显示一块黑色。问题描述请看:问题描述:http://stackoverflow.com/questions/30159565/ios7-8-translucent-navigationbar-top-right-corner-of-the-black
希望有解决方案的朋友能够提供一下,万分感激。 ^^



界面预览:









版权声明:本文为博主原创文章,未经博主允许不得转载。博主微信:lofocus https://blog.csdn.net/cuibo1123/article/details/45645157

两种常见的UITabBarController+UINavigationController模式

两种常见的UITabBarController+UINavigationController模式
  • feng2qing
  • feng2qing
  • 2017-03-20 21:33:16
  • 1726

UITabBarController和UINavigationController的整合使用

好多项目都同时用到了UITabBarController和UINavigationController,XCode可以直接创建这两个控制器中的其中一个,但是要一起用的话就得稍微麻烦点。层级关系首先得搞...
  • hwe_xc
  • hwe_xc
  • 2016-01-27 15:38:56
  • 10251

iOS开发——使用Navigation和TabBar构造App框架与界面栈的重构

对于iOS开发来说,Navigation和TabBar是最常用到的界面元素。我在前面几篇博客中《iOS开发——代码生成TabBar与视图切换详解》《iOS纯代码实现界面建立、跳转、导航栏(无story...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016-04-29 12:46:08
  • 4767

[iOS 导航与TabBar混合] UINavigationCon+UITabBarViewController 混合使用

一般我们 _window.rootViewController = ???都是用一个根导航控制器 说白了, 其实整个app里面 就有一个导航控制器如果 _window.rootViewContro...
  • iOSTianNan
  • iOSTianNan
  • 2016-08-09 15:00:10
  • 2355

IOS tabBarController 嵌套navigationController 实现多个界面的跳转

IOS开发中.很多时候都需要在不同的ViewController中来回的跳转,那么如何更加方便的跳转界面呢? 苹果提供了多种跳转方式 下面就说下最常用的tabBarController和navigat...
  • q562679764
  • q562679764
  • 2015-10-27 21:07:22
  • 3271

iOS Navigation+TabBar简单框架

原文章来源:iOS大全 标题:十分钟搭建App主流框架 作者:陈燕翔 网址:http://www.jianshu.com/p/fc71652f2f89 - (void)viewD...
  • u010545480
  • u010545480
  • 2015-09-20 14:02:05
  • 597

ios TabBar + Navigation纯代码实现

  • 2013年07月05日 10:57
  • 88KB
  • 下载

修改UINavigationController,UINavigationBar背景颜色,字体颜色

- (void)setNav {     UINavigationBar *bar = [UINavigationBar appearance];     //设置显示的颜色     bar...
  • l863784757
  • l863784757
  • 2015-04-17 17:36:33
  • 36714

解决ReactNavigation中Navigator嵌套问题

需求:由主页MainScreen跳转到站内信页面MessageScreen,在MessageScreen存在自定义的TitleBar和3个Tab布局。...
  • Jason847
  • Jason847
  • 2017-10-17 16:22:13
  • 541
收藏助手
不良信息举报
您举报文章:UITabBar和UINavigation组合使用与自定义样式(iOS)
举报原因:
原因补充:

(最多只允许输入30个字)