您好我正在开发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];
}
上面的方法导致一个问题就是它不断添加分隔符视图的子图层。所以我有两个选项,现在一个是对添加的子视图添加一些自动布局约束;或者第二个是每次删除旧的子视图然后添加新的。但我不知道该怎么做。或者有没有简单的方法来做到这一点?需要一些帮助。谢谢。
答案 0 :(得分:1)
这不仅提供了任何颜色的解决方案,还提供了分离器高度的解决方案:
- (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;
}