10

有什么办法可以将导航栏的背景设置为UINavigationController纯色?

我知道我可以改变 Tint 颜色,但这仍然给我留下了渐变/玻璃效果。

有什么办法可以摆脱它,而只有一种普通的旧纯色?

4

5 回答 5

47

以下代码还导致导航栏的纯色:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor redColor]];
于 2013-03-21T16:18:48.933 回答
5

我认为你必须继承 UINavigationBar 并覆盖-(void)drawRect:(CGRect)rect

UIColor *colorFlat = /* any UIColor*/
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [colorFlat CGColor]);
CGContextFillRect(context, rect);
于 2012-04-24T18:43:23.853 回答
0

我曾经覆盖drawRect方法和填充颜色;但是iOS7升级后会导致UINavigationBar出现一些问题。如果您编写自己的 drawrect 方法,即使您调用 [super drawRect],它也会更改栏的尺寸,最终您会得到一个高度为 44 像素的导航栏。状态栏为空。

为了得到一个纯色的导航栏,我使用了一个图像作为背景图像(任何小的纯色图像都可以,因为你正在拉伸它)并在 UINavigationBar 子类的 initWithFrame 方法中添加了这些行:

[self setBackgroundColor:[UIColor clearColor]]     
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"bgimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault]; 
于 2014-02-17T14:20:36.207 回答
0

以下代码对我有用:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
self.navigationController.navigationBar.translucent = NO;
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
于 2015-12-30T11:16:59.580 回答
-4

创建一个扩展UIViewController的CustomUIViewController并将viewDidLoad覆盖为如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.view.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0];
}

之后,在您的控制器中使用您的 CustomUIViewController。

学分

于 2012-04-24T18:18:32.853 回答