[iOS微博项目 - 1.1] - 设置导航栏主题(统一样式)

A.导航栏两侧文字按钮

1.需求:

所有导航栏两侧的文字式按钮统一样式

普通样式:橙色

高亮样式:红色

不可用样式:亮灰

阴影:不使用

字体大小:15

github: https://github.com/hellovoidworld/HVWWeibo

2.实现效果

默认样式:

统一使用样式:

3.思路

  • 在创建item的时候逐个设置:代码超级冗余
  • 抽取创建公共父类:稍好的选择,但是继承了此公共父类的控制器,就不能操作其去继承系统自带的控制器类了,造成很大的隐患。iOS中控制器不建议提取公共父类,最好直接继承系统自带控制器。
  • 使用主题appearance统一设置所有UIBarButtonItem的样式:采用!在自定义的UINavigationController的类初始化方法中实现一次,就可以改变所有使用了此类的BarButtonItem样式

4.实现

HVWNavigationViewController.m:

 1 /** 类初始化的时候调用 */
 2 + (void)initialize {
 3     // 初始化导航栏样式
 4     [self initNavigationBarTheme];
 5
 6     // 初始化导航栏item样式
 7     [self initBarButtonItemTheme];
 8 }
 9
10 /** 统一设置导航栏item的样式
11 * 因为是通过主题appearence统一修改所有NavivationBar的样式,可以使用类方法
12 */
13 + (void) initBarButtonItemTheme {
14     // 设置导航栏,修改所有UINavigationBar的样式
15     UIBarButtonItem *appearance = [UIBarButtonItem appearance];
16
17     // 设置noraml状态下的样式
18     NSMutableDictionary *normalTextAttr = [NSMutableDictionary dictionary];
19     // 字体大小
20     normalTextAttr[NSFontAttributeName] = [UIFont systemFontOfSize:15];
21     // 字体颜色
22     normalTextAttr[NSForegroundColorAttributeName] = [UIColor orangeColor];
23     // 设置为normal样式
24     [appearance setTitleTextAttributes:normalTextAttr forState:UIControlStateNormal];
25
26     // 设置highlighted状态下的样式
27     NSMutableDictionary *highlightedTextAttr = [NSMutableDictionary dictionaryWithDictionary:normalTextAttr];
28     // 字体颜色
29     highlightedTextAttr[NSForegroundColorAttributeName] = [UIColor redColor];
30     // 设置为normal样式
31     [appearance setTitleTextAttributes:highlightedTextAttr forState:UIControlStateHighlighted];
32
33     // 设置disabled状态下的样式
34     NSMutableDictionary *disabledTextAttr = [NSMutableDictionary dictionaryWithDictionary:normalTextAttr];
35     // 字体颜色
36     disabledTextAttr[NSForegroundColorAttributeName] = [UIColor lightGrayColor];
37     // 设置为normal样式
38     [appearance setTitleTextAttributes:disabledTextAttr forState:UIControlStateDisabled];
39
40 }

B.设置导航栏样式

1.需求:

  • 统一显示文字颜色:黑色
  • 文字阴影:禁止
  • 字体大小:20

2.思路:同“A”

3.实现:

同“A"

HVWNavigationViewController.m:

 1 /** 统一设置导航栏样式 */
 2 + (void) initNavigationBarTheme {
 3     // 使用appearence(主题)设置,统一修改所有导航栏样式
 4     UINavigationBar *appearance = [UINavigationBar appearance];
 5
 6     // 为了统一iOS6和iOS7,iOS6需要设置导航栏背景来模拟iOS7的效果
 7     if (!iOS7) {
 8         [appearance setBackgroundImage:[UIImage imageWithNamed:@"navigationbar_background"] forBarMetrics:UIBarMetricsDefault];
 9     }
10
11     // 设置属性
12     NSMutableDictionary *attr = [NSMutableDictionary dictionary];
13     // 设置字体
14     attr[NSForegroundColorAttributeName] = [UIColor blackColor];
15     attr[NSFontAttributeName] = [UIFont systemFontOfSize:20];
16     // 消去文字阴影,设置阴影偏移为0
17     NSShadow *shadow = [[NSShadow alloc] init];
18     shadow.shadowOffset = CGSizeZero;
19     attr[NSShadowAttributeName] = shadow;
20
21     [appearance setTitleTextAttributes:attr];
22 }
时间: 2024-12-21 17:22:58

[iOS微博项目 - 1.1] - 设置导航栏主题(统一样式)的相关文章

iOS开发项目篇—04添加导航栏的按钮

iOS开发项目篇—04添加导航栏的按钮 一.设置导航栏的按钮 要求实现的效果:             说明:默认状态下和高亮状态下的图片是不一样的. 按钮的图片需要设置默认状态和高亮状态时的显示,系统了提供的下面方法 viewController.navigationItem.leftBarButtonItem=[UIBarButtonItem alloc]initWithImage:<#(UIImage *)#> style:<#(UIBarButtonItemStyle)#>

IOS开发中设置导航栏主题

/** * 系统在第一次使用这个类的时候调用(1个类只会调用一次) */ + (void)initialize { // 设置导航栏主题 UINavigationBar *navBar = [UINavigationBar appearance]; // 设置背景图片 NSString *bgName = nil; if (iOS7) { // 至少是iOS 7.0 bgName = @"NavBar64"; } else { // 非iOS7 bgName = @"NavB

新浪微博客户端(4)-设置导航栏主题

为了使整个项目的NavigationBar 上的UIBarButtonItem的颜色,字体大小一致,需要设置导航栏主题. 由于项目使用的是自定义的DJNavigationController,而又要保证只设置一次,所以将设置主题的代码写在DJNavigationController.m文件中的initialize方法中. DJNavigationController.m #import "DJNavigationController.h" @implementation DJNavig

设置导航栏主题+iOS6 &amp; iOS7 适配

1 /** 2 * 设置导航栏按钮主题 3 */ 4 + (void)setupBarButtonItemTheme 5 { 6 UIBarButtonItem *item = [UIBarButtonItem appearance]; 7 8 // 设置背景 9 if (!iOS7) { 10 [item setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background"] forState:UIC

ios weibo 第二天 设置导航栏属性,添加加号按钮

要点:1.在底部添加加号按钮 2.设置导航栏属性 1.weibo底部的button其中四个按钮是一样的,其中中间的加号需要另外做处理 tablebar是自己定义的 ,代码如下 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 删除系统自动生成的UITabBarButton for (UIView *child in self.tabBar.subviews) { if ([child isKin

iOS菜鸟开发-2 导航栏主题

1.给每个子控制器添加导航栏 /** *  初始化一个子控制器 * *  @param child               需要初始化的子控制器 *  @param title               标题 *  @param imageName           未选中图标 *  @param selectedImageName   选中的图标 */ - (void)setupOneChildVC:(UIViewController *)child title:(NSString *

iOS不得姐项目--appearance的妙用,再一次设置导航栏返回按钮,导航栏左右按钮的封装(巧用分类)

一.UI_APPEARANCE_SELECTOR 彩票项目中appearance的用法一直没有搞明白,这次通过第二个项目中老师的讲解,更深一层次的了解到了很多关于appearance的作用以及使用方法. 在iOS属性后有UI_APPEARANCE_SELECTOR标志都可以一次性统一设置.这种情况还有很多.比如说统一设置UITabbarItem的文字颜色 通过appearance来同意设置属性最好是在+ (void)initialize;方法里面. 项目中设置导航栏背景图片的代码: 项目中设置T

iOS项目开发实战——自定义设置导航栏和状态栏背景

在iPhone的状态栏顶部,会有很多的信息,如运营商,信号强弱,网络状况,时间,电量等等.我们使用很多的App,如微信,QQ等等,都会发现导航栏的背景或者说图片都是重新设置过的,这样就能增加用户体验,也能更加节省下方的屏幕空间.那如何来设置导航栏的图片呢? (1)首先建立一个iOS项目,语言选择Swift.并且在Images.xcassets中拖入一张图片,大小要自己设置好,用来作为顶部导航栏的背景. (2)在Main.storyboard中选中ViewController,然后选择Editor

【转】iOS中设置导航栏标题的字体颜色和大小

原文网址:http://www.360doc.com/content/15/0417/11/20919452_463847404.shtml iOS中设置导航栏标题的字体颜色和大小,有需要的朋友可以参考下. 在平时开发项目的时候,难免会遇到修改导航栏字体大小和颜色的需求,一般使用自定义视图的方法,其实还存在一种方法. 方法一:(自定义视图的方法,一般人也会采用这样的方式) 就是在导航向上添加一个titleView,可以使用一个label,再设置label的背景颜色透明,字体什么的设置就很简单了.