ChatGPT解决这个技术问题 Extra ChatGPT

如何在 iOS 7 中更改导航栏颜色?

如何在 iOS 7 中更改导航栏颜色?

基本上我想实现类似 Twitter Nav Bar 的东西(更新了 Twitter for iOS7)。我在 view controller 顶部嵌入了一个导航栏。我想要的只是将导航栏颜色与顶部的实用工具栏一起更改为浅蓝色。我的 storyboard 中似乎找不到选项。

[[UINavigationBar 外观] setBarTintColor:[UIColor blackColor]];这将从 ios 7 开始工作

C
Community

在 iOS 7.0 中,条形图的 tintColor 行为已更改。它不再影响酒吧的背景。

从文档中:

barTintColor Class Reference

应用于导航栏背景的色调颜色。

@property(nonatomic, retain) UIColor *barTintColor

讨论
除非您将 translucent 属性设置为 NO,否则此颜色默认为半透明。

可用性

在 iOS 7.0 及更高版本中可用。

声明于
UINavigationBar.h

代码

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

我们还可以使用它来检查 iOS 7 UI Transition Guide 中提到的 iOS 版本

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

使用 xib 编辑

https://i.stack.imgur.com/Pvu9O.png


但是我在哪里可以放置此代码?我对此很陌生哈哈。我将它放在应用程序委托中,它似乎并没有做太多。虽然它构建得很好。
视图控制器内部
我会把它放在你的 viewController 中的 viewDidLoad 中。
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) 这会更好地测试您正在运行的 iOS 版本,正如苹果在转换指南中所述:developer.apple.com/library/ios/documentation/userexperience/…
您还可以使用 if ([self.navigationController.navigationBar respondsToSelector:@selector(setBarTintColor:)]) 与版本号来检查是否可以设置 barTintColor
p
pkamb

做最初的问题——让旧的 Twitter 导航栏看起来,蓝色背景和白色文本——很容易在 Xcode 中使用 Interface Builder。

使用文档大纲,选择您的导航栏。

在 Attributes Inspector 的 Navigation Bar 组中,将 Style 从 Default 更改为 Black。这会将导航栏和状态栏的背景颜色更改为黑色,并将其文本更改为白色。因此,当应用程序运行时,状态栏中的电池和其他图标和文本将显示为白色。

在同一个导航栏组中,将 Bar Tint 更改为您喜欢的颜色。

如果您的导航栏中有条形按钮项目,它们仍会以默认的蓝色显示其文本,因此在属性检查器的视图组中,将色调更改为白色。

那应该可以得到你想要的。这是一个屏幕截图,可以更轻松地查看在哪里进行更改。

https://i.stack.imgur.com/hZEYg.png

请注意,仅更改 Bar Tint 不会更改导航栏或状态栏中的文本颜色。风格也需要改变。


不推荐为 iOS 9 选择黑色,任何更新答案的机会
@Rob85 我现在不在 Xcode 面前,但是当 Xcode 7(带有 iOS 9)发布时,我验证这些说明仍然是最新的。确保选择了导航栏,黑色样式应该在导航栏的属性检查器中。
@Rob85 我查看了 Apple 的开发者网站,样式 DefaultBlack 在 iOS 9 中仍然可用。弃用的是 BlackOpaqueBlackTranslucent,它们被替换为 Black 样式和半透明复选框。 UIBarStyle on Apple's Developer website
对不起@alondono你是绝对正确的,我点击导航控制器上的导航栏不在文档大纲中,这就是我看不到它的原因。我看到不推荐使用的黑色位于模拟指标->状态栏上。感谢您的回复
@Rob85 酷!谢谢你让我知道。
A
Alex Zavatone
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the button's color

我到底可以把这段代码放在哪里?对不起那里的新手问题哈哈
代码可以放在导航控制器的-(void)viewDidLoad方法中
在 iOS 9 中,将 barTintColor 设置为黑色会使时间、设备名称和电池也变黑,因此您看不到它们。为了避免这种情况,不要使用 barTintColor,而是使用 self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
N
Nishant Tyagi

在基于导航的应用程序中,您可以将代码放在 AppDelegate 中。更详细的代码可能是:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];

为 iOS 7 添加 [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];
A
Andrew

viewDidLoad 中,设置:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

将 ( blueColor ) 更改为您想要的任何颜色。


W
William Hu

要快速更改导航栏颜色:

self.navigationController?.navigationBar.barTintColor = UIColor.red

更改标题字体、大小、颜色:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]

B
BoltClock

在 iOS 7 中,您必须使用 -barTintColor 属性:

navController.navigationBar.barTintColor = [UIColor barColor];

K
Kyle Greenlaw

如果您想使用十六进制代码,这是最好的方法。

首先,在类的顶部定义它:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

然后在“应用程序 didFinishLaunchingWithOptions”中,输入:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

用十六进制代码代替 00b0f0。


[UINavigationBar 外观] 非常有帮助。
b
bbaassssiiee

如果您需要支持 ios6 和 ios7,那么您可以在 UIViewController 中使用它来获得特定的浅蓝色:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}

在 iOS 7 上:-self.navigationController.navigationBar.barTintColor 是条形颜色并且 -self.navigationController.navigationBar.tintColor 是按钮文本颜色(返回、完成...)。
p
pqsk

它实际上比我在这里看到的答案更容易:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

https://i.stack.imgur.com/Kqa3W.png


谢谢,几个月前我在玩的时候改变了这个,不知道如何把它改回来!
没问题,很高兴我能帮助别人
我认为这是最直接的答案!谢谢
没问题。很高兴它仍然有帮助
D
Dashony
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}

C
CodeBrew

为了使 Rajneesh071 的代码完整,您可能还需要设置导航栏的标题颜色(如果需要,还可以设置字体),因为默认行为从 iOS 6 更改为 7:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}

A
Abduliam Rehmanius

仅在您的 ViewContorller 中添加此代码在您的 AppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}

M
MaxEcho

在基于导航的应用程序中,您可以更改颜色

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}

在 iOS7 中更改 tintColor 属性不再具有更改条形背景颜色的效果。 iOS7 中的色调颜色仅影响 BarButtonItems 等的文本颜色。
M
Mubin Shaikh
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }

I
Irfan

这个问题和这些答案很有帮助。有了它们,我可以用白色标题和按钮文本设置我想要的深蓝色 navigationBar 颜色。

但我还需要将时钟、载波、信号强度等更改为白色。黑色与深蓝色的对比不够。

我可能在之前的一个答案中忽略了该解决方案,但我可以通过将此行添加到我的顶级 viewControllerviewDidLoad 来进行更改:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

UIStatusBarStyleLightContent 有效,但似乎 setBarStyle: 的正确枚举是 UIBarStyleBlack
G
Gaurav Gilani
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}

佚名

对于颜色:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

图像

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];