Ios7 在IOS上设置导航栏分隔符颜色

Ios7 在IOS上设置导航栏分隔符颜色,ios7,uinavigationcontroller,uinavigationbar,separator,Ios7,Uinavigationcontroller,Uinavigationbar,Separator,嗨,我正在开发一个IOS应用程序,我试图用不同的方式设置导航栏分隔符的颜色,但它不适合我。我尝试了以下方法: [self.navigationController.navigationBar.layer setBorderWidth:2.0];// Just to make sure its working [self.navigationController.navigationBar.layer setBorderColor:[[UIColor redColor] CGColor]]; 使

嗨,我正在开发一个IOS应用程序,我试图用不同的方式设置导航栏分隔符的颜色,但它不适合我。我尝试了以下方法:

[self.navigationController.navigationBar.layer setBorderWidth:2.0];// Just to make sure its working
[self.navigationController.navigationBar.layer setBorderColor:[[UIColor redColor] CGColor]];
使用上面的方法,我可以更改整个导航栏的边框颜色,但我只想更改分隔符颜色

我尝试了另一种方法:

 UIView *navBorder = [[UIView alloc] initWithFrame:CGRectMake(0,navBarCont.navigationBar.frame.size.height,navBarCont.navigationBar.frame.size.width, 1)];

[navBorder setBackgroundColor:[UIColor colorWithWhite:255.0f/255.f alpha:0.1f]];
[navBorder setOpaque:YES];

[navBarCont.navigationBar addSubview:navBorder];
这种方法可以按照我的意愿工作,但唯一的问题是,当我旋转我的设备时,它不会随之改变。这意味着,如果最初我的设备处于纵向模式,它将以适当的宽度显示分隔符,但一旦我将设备旋转到横向模式,它将不会据此调整宽度

因此,我也尝试实现设备定向更改侦听器

 [[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(deviceOrientationDidChangeNotification:)
 name:UIDeviceOrientationDidChangeNotification
 object:nil];

 - (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{
     [self setNavbar];
}

上面的方法导致了一个问题,它不断地添加分隔符视图的子层。所以我现在有两个选择,一个是在添加的子视图上设置一些自动布局约束;第二种是每次删除旧的子视图,然后添加新的子视图。但是我不知道怎么做。或者有什么简单的方法可以做到这一点?我需要一些帮助。谢谢。

这不仅为任何颜色提供了解决方案,还为分隔器的高度提供了解决方案:

- (void)viewDidLoad
{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [self imageWithColor:[UIColor redColor] size:(CGSizeMake(self.view.frame.size.width, 1.0f))];
    self.navigationController.navigationBar.translucent = YES;
}

- (UIImage*) imageWithColor:(UIColor*)color size:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    UIBezierPath* rPath = [UIBezierPath bezierPathWithRect:CGRectMake(0., 0., size.width, size.height)];
    [color setFill];
    [rPath fill];
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}