iOS学习之UINavigationController

下述属性全为iOS7以后

设置导航条风格

self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

设置导航条背景颜色

self.navigationController.navigationBar.backgroundColor = [UIColor redColor];

 设置导航条背景颜色时,导航条风格不能是UIBarStyleDefault。

设置导航条背景图片

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBg"] forBarMetrics:UIBarMetricsDefault];

UIBarMetricsDefault 为iPhone的模式(竖屏叫做人像模式、横屏叫做风景模式),设置背景图片后,背景颜色会被遮挡。图片尺寸高度需为44。如果过窄会被平铺填充,过大会超出。但是可以设置导航条的另一个属性来进行裁剪。如果想导航条填充到状态栏,高度设为64,clipsToBounds需为NO。

self.navigationController.navigationBar.clipsToBounds = YES;

设置状态栏样式(深色背景白色文字、浅色背景黑色文字)

1、info.plist中添加 View controller-based status bar appearance设置为NO,然后通过全局的application设置

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;

 如果为YES,改方法无效。(默认为YES)

2、如果ViewController没在UINavigationController中,则可以通过覆盖preferredStatusBarStyle方法实现,不过得在ViewDidLoad中调用

-(void)viewDidLoad {
  [super viewDidLoad];
  [self setNeedsStatusBarAppearanceUpdate];
}

-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleDefault;
}

 3、如果ViewController在UINavigationController中,方法2无效。因为调用 setNeedsStatusBarAppearanceUpdate 只会进入到UINavigationController中的preferredStatusBarStyle中。可以通过UINavigationBar的barStyle属性来影响状态栏。如

//status bar的字体为白色
//导航栏的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

//status bar的字体为黑色
//导航栏的背景色是白色,状态栏的背景色也是白色。
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;

 或者可以通过子类化UINavigationController如MyNav,在MyNav中实现preferredStatusBarStyle方法,并将ViewController加到MyNav中。然后通过方法2实现

MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;

@implementation MyNav

- (UIStatusBarStyle)preferredStatusBarStyle
{
  UIViewController* topVC = self.topViewController;
  return [topVC preferredStatusBarStyle];  //可以实现在viewController中定制
}

设置导航条隐藏

self.navigationController.navigationBarHidden = YES;

 iOS7以后,视图控制器的view的起始点是从屏幕最顶端开始,包括状态栏。因此布局时需要留出20像素。 

UINavigationItem详解

常用属性和方法:

@property(nonatomic, copy) NSString *title;    //设置标题,显示在导航栏中间
@property(nonatomic, retain) UIView *titleView;    //设置标题视图,显示在导航栏中间位置
@property(nonatomic, retain) UIBarButtonItem *leftBarButtonItem;    //左侧按钮
@property(nonatomic, retain) UIBarButtonItem *rightBarButtonItem;    //右侧按钮

-(void)setLeftBarButtonItem:(UIBarButtonItem*)item animated:(BOOL)animated;
-(void)setRightBarButtonItem:(UIBarButtonItem*)item animated:(BOOL)animated;
-(void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated;    //设置左侧的一组按钮
-(void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated;    //设置右侧的一组按钮

UIBarButtonItem的初始化方法

-(id)initWithImage:(UIImage*)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;

-(id)initWithTitle:(NSString*)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;

-(id)initWithBarButtonSystemItem:(UIBarButtonSystemItem*)systemItem  target:(id)target action:(SEL)action;

-(id)initWithCustomView:(UIView *)customView;

UIBarButtonItemStyle为UIBarButtonItemStylePlain风格时,按钮颜色随导航条的颜色变化,为UIBarButtonItemStyleDone风格时,按钮颜色始终为蓝色。 

 

posted on 2016-03-11 10:12  技术大白  阅读(309)  评论(0编辑  收藏  举报