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

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

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

iOS Nav+TabBar架构总结

在iphone开发中,Nav+TabBar这种架构十分常见,最近刚刚完成了一个这样的项目,现在来总结下。我将通过一个Demo来介绍下: 首先看下做出的效果,如下图所示: 这个Demo功能很...
  • huifeidexin_1
  • huifeidexin_1
  • 2012年08月12日 10:24
  • 13645

Tabbar与Navigation嵌套

Tabbar与Navigation嵌套 类似微信等App中,TabbarViewController作为RootView,tabbar中的ViewController又被嵌套在Navigation...
  • lemon798
  • lemon798
  • 2015年08月06日 13:18
  • 702

UITabBarController和UINavigationController的整合使用

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

ios中UINavigation和UITabBar的结合

基本现在常见的应用里单一使用Navigation导航栏或者单独使用TabBar的情况已经不多见了,除非是特别专一的应用方式,否则常常会见到两种布局方式结合起来,自己在做第一个项目的时候也是遇到了这个需...
  • Cloudox_
  • Cloudox_
  • 2015年04月27日 20:06
  • 765

UITabBarController中点击UINavigationController根视图后隐藏tabbar的问题

UITabBarController中点击UINavigationController根视图后隐藏tabbar的问题 新建一个UITabBarController,里面放了4个标签页,其中有一个标签...
  • l863784757
  • l863784757
  • 2015年01月15日 16:40
  • 2189

页面跳转 UITabBarController+UINavigationController+UIViewController

  • 2014年04月02日 13:14
  • 370KB
  • 下载

两种常见的UITabBarController+UINavigationController模式

两种常见的UITabBarController+UINavigationController模式
  • feng2qing
  • feng2qing
  • 2017年03月20日 21:33
  • 1309

tabbar在UITabbarController和UINavigationController中的显示,隐藏问题

解决tabbar在UITabbarController与Navigation之间显示的问题: 问题一:希望当转向navigation时,希望tabbar隐藏,让自定义的toolbar显示出来,  ...
  • u012336567
  • u012336567
  • 2014年07月21日 20:16
  • 1707

iOS 自定义nav tab 样式

//状态栏颜色 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; ...
  • u010545480
  • u010545480
  • 2016年08月30日 13:45
  • 611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITabBar和UINavigation组合使用与自定义样式(iOS)
举报原因:
原因补充:

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