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

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

源代码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按钮的时候,滑动屏幕边缘返回可能会失效,而设置代理后又会导致应用卡死,具体处理方法还请下载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
希望有解决方案的朋友能够提供一下,万分感激。 ^^

界面预览:

时间: 2024-10-09 22:12:18

UITabBar和UINavigation组合使用与自定义样式的相关文章

WPF DataGrid自定义样式

WPF DataGrid自定义样式 微软的WPF DataGrid中有很多的属性和样式,你可以调整,以寻找合适的(如果你是一名设计师).下面,找到我的小抄造型的网格.它不是100%全面,但它可以让你走得很远,有一些非常有用的技巧和陷阱. 在DataGrid中的最高水平,你可以改变的外观和感觉,通过设置一些: Property Type Values Default AlternatingRowBackground Brush Any Brush Null Background Brush Any

WPF自定义样式篇-DataGrid

WPF自定义样式篇-DataGrid 先上效果图: 样式: <!--DataGrid样式-->    <Style TargetType="DataGrid">        <Setter Property="RowHeaderWidth" Value="0"></Setter>        <Setter Property="AutoGenerateColumns"

超详细的Xcode代码格式化教程,可自定义样式

为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题. 在之前,我们可能会写完代码后,再一点一点去调格式,很浪费时间. 有了ClangFormat插件后,就可以一键把代码格式化成统一的样式,不仅节省了时间,也使得代码更规范.我们还可以定制自己喜欢的样式. 安装ClangFormat插件 可以手动安装(下载GitHub项目编译),也可以用Alcatraz(插件管理器)安装,都很简单,具体可以看我的文章<Xcode方便开发的插件推荐>

SeekBar自定义样式

网上的SeekBar自定义样式的资料很多,大多是抄来抄去.我最近用到这个,也从网上抄了一个,但是遇到不少问题,其中一个就是SeekBar的背景条不显示,最后才找到解决方法. 1. 使用自定义SeekBar <SeekBar android:id="@+id/ctrl_seekBar" android:layout_width="wrap_content" android:layout_height="wrap_content" androi

[android] 安卓自定义样式和主题

简单练习自定义样式和主题,样式是加在View上,主题是加在Application或者Activity上 styles.xml <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 自定义样式 --> <style name=&quo

纯css兼容个浏览器input[type=&#39;radio&#39;]不能自定义样式

各个浏览器对于表单input[type='radio'].input[type='checkbox']的样式总是各有差异 //html <div class="remember-account"> <input type="checkbox"> <span>记住账号</span> </div> //css .remember-account { display: inline-block; font-siz

很酷的伸缩导航菜单效果,可自定义样式和菜单项。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

制作自定义样式的窗口

不使用windows自带的窗口样式,使用自定义的客户区, <Window xmlns:my="clr-namespace:MiniFileTransferClient.Presentation.WPF.UILogic.ShowPanels" x:Class="MiniFileTransferClient.Presentation.WPF.MiniFileTransferViewer" xmlns="http://schemas.microsoft.c

WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.DataGrid自定义样式 DataGrid是常用的数据列表显示控件,先看看实现的效果(动态图,有点大): DataGrid控件样式结构包括以下几个部分: 列头header样式 调整列头宽度的列分割线样式 行样式 行头调整高度样式 行头部样式