navigaitonBar的自定义设置

navigaitonBar的自定义设置

navigationBar介绍:

navigationbar就是一个导航视图控制器上面的导航栏。

如何设置这个navigationbar?

首先我们来探讨如何来获取navigationbar?

我们可以使用下面两个方法来获取我们当前页面的navigationbar


	self.navigationController.navigationBar
	[UINavigationBar appearance]

获得了这个navigationbar之后,我们可以在这个属性上面进行自定义设置:

设置bar背景颜色方法:

[self.navigationBar setBackgroundColor:[UIColor redColor]];


设置bar的颜色:

[self.navigationBar setBarTintColor:[UIColor redColor]];


设置bar背景图片方法:

[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"Ellipse 4"] forBarMetrics:UIBarMetricsDefault];


要设置navigationBar的title的属性的时候,我们可以使用setTitleTextAttributes方法来设置。

    UIColor *color = [UIColor yellowColor];
    NSShadow *shadow = [[NSShadow alloc] init];
    [shadow setShadowColor:[UIColor blueColor]];
    [shadow setShadowOffset:CGSizeMake(1, 1)];
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:22];

    [self.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:color,NSForegroundColorAttributeName, shadow, NSShadowAttributeName, font, NSFontAttributeName , nil]];


在这个方法中,我们首先title的属性用NSDictionary的value和key表示出来。然后在这个方法中提取出这些属性,设置到这个titleText中去。这里我们需要注意一下,就是这个方法是覆盖设置的,就是说我们先设置了一个字体,然后我们在后来又用这个方法来设置阴影,那么这个字体设置就没有效果了的。

下面是我们的属性的名,我们方便我们在编写的时候可以查看,便于属性的设置:

NSForegroundColorAttributeName//设置字体颜色
NSShadowAttributeName//设置阴影
NSFontAttributeName//设置字体

上面方法中的shadow设置的介绍:

    NSShadow *shadow = [[NSShadow alloc] init];
//    设置阴影的颜色
    [shadow setShadowColor:[UIColor blueColor]];
//    设置阴影的位置,就是阴影偏移原来位置的坐标
    [shadow setShadowOffset:CGSizeMake(1, 1)];

如何设置VavigationBar上的按钮:

下面是在NavigationBar中设置一个按钮的方法,这里需要注意下设置button的方法不能在navigatonController中的rootViewCotroller中有效。

设置代码的方法为:

UIBarButtonItem *buttonItem3 = [[UIBarButtonItem alloc] init];
    [buttonItem3 setTitle:@"back1"];
    [buttonItem3 setTarget:self];
    [buttonItem3 setAction:@selector(backButtonAction)];
    self.navigationItem.leftBarButtonItem = buttonItem3;

这个左边的按钮是我们刚刚创建的。

我们也可以用代码创建好几个button:

UIBarButtonItem *buttonItem2 = [[UIBarButtonItem alloc] init];
    [buttonItem2 setTitle:@"back"];
    [buttonItem2 setTarget:self];
    [buttonItem2 setAction:@selector(rightBarButton2)];
    
    UIBarButtonItem *buttonItem1 = [[UIBarButtonItem alloc] init];
    [buttonItem1 setTitle:@"left1"];
    [buttonItem1 setWidth:10];
    [buttonItem1 setImage:[UIImage imageNamed:@"Ellipse 4"]];
    [buttonItem1 setTarget:self];
    [buttonItem1 setAction:@selector(rightBarButton1)];
    self.navigationItem.rightBarButtonItems = @[buttonItem1, buttonItem2];

这个右边的两个button就是我们刚刚创建的。


我们也可以title的位置自定义View,例如下面的代码:

UIButton *buttonItem5 = [[UIButton alloc] initWithFrame:CGRectMake(120, 20, 40, 40)];
    [buttonItem5 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [buttonItem5 setTitle:@"test" forState:UIControlStateNormal];
    [buttonItem5 addTarget:self action:@selector(titleViewButton) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.titleView = buttonItem5;

看看这个代码的本质,self.navigationItem.titleView其实是系统给我提供的一个UIView的类型的属性,因此我们可以设置一个UIVIew类型(或者其子类)的实例,设置好将其添加到self.navigationItem.titleView的属性里面,因此看来这个属性的自定义的自由度是非常大的。例如刚刚的代码:我们在代码中设置的UIButton的就是一个UIView的子类。因此,我们可以使用这个button来设置这个属性。













原文地址:https://www.cnblogs.com/AbeDay/p/5026947.html