更改 UINavigationBar 字体属性?
Posted
技术标签:
【中文标题】更改 UINavigationBar 字体属性?【英文标题】:Change UINavigationBar font properties? 【发布时间】:2012-02-05 04:01:56 【问题描述】:我有一个 UINavigationBar 添加到我的 UIViewController 视图中。我想更改字体属性。请注意,我想更改 UINavigationBar 而不是控制器。在我使用 UINavigationController 的应用程序中,我使用 self.navigationItem.titleView = label;
来显示自定义标签。
如何在 UINavigationBar 中添加自定义标题?
P.S 我用它来设置我的 UINavigationBar 的标题文本self.navBar.topItem.title = @"Information";
。
【问题讨论】:
【参考方案1】:(使用新的 ios 5.0 Appearance API 无法做到这一点)。
编辑:
iOS >= 5.0:
为导航栏设置标题文本属性:
// Customize the title text for *all* UINavigationBars
NSDictionary *settings = @
UITextAttributeFont : [UIFont fontWithName:@"YOURFONTNAME" size:20.0],
UITextAttributeTextColor : [UIColor whiteColor],
UITextAttributeTextShadowColor : [UIColor clearColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero];
[[UINavigationBar appearance] setTitleTextAttributes:settings];
iOS
UINavigationItem 没有一个叫做 label 的属性,只有一个 titleView。您只能通过将自定义标签设置为此标题视图来设置字体 您可以使用以下代码:(建议here)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 44)];
label.font = [UIFont fontWithName:@"YOURFONTNAME" size:20.0];
label.shadowColor = [UIColor clearColor];
label.textColor =[UIColor whiteColor];
label.text = self.title;
self.navigationItem.titleView = label;
[label release];
【讨论】:
确实,感谢您的评论。我当时找不到。【参考方案2】:只要把它放在你的应用代理中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
来自雷·温德利希:
http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"STHeitiSC-Light" size:0.0],
UITextAttributeFont, nil]];
【讨论】:
不要将字体设置为 0,这会在您推送到视图控制器时导致视觉错误。首先,当您按下字体时,字体的大小将为 0,然后它会适当地调整自身大小,但它仍然是可见的——而且很烦人。将其设置为 18.0【参考方案3】:从 iOS 5 开始,我们必须使用 titleTextAttribute 字典(UInavigation 控制器类参考中的预定义字典)设置导航栏的标题文本颜色和字体。
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor], NSForegroundColorAttributeName,
[UIFont fontWithName:@"ArialMT" size:16.0], NSFontAttributeName,nil]];
以下教程是自定义 UIElements 的最佳教程,如 UInavigation bar、UIsegmented control、UITabBar。这可能对你有帮助
http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
【讨论】:
@rolandjitsu 你只需要使用 NSFontAttributeName 而不是 UITextAttributeFont。 @CedricSoubrie ~ 是的,没错,只是想通知作者,这样我们才能得到更新的答案:) 并且 UITextAttributeTextColor 应该替换为 NSForegroundColorAttributeName【参考方案4】:不要忘记将字体添加到您的目标。
我对字体做了所有可以做的事情,但我无法加载它,而事实上该字体不是我的目标的成员。
因此,还要检查添加的自定义字体的 Target Membership。
【讨论】:
【参考方案5】:下面的链接将为您提供帮助。 这取决于您想在应用程序中的任何位置在当前 viewController 的导航栏上设置字体属性的位置
你可以在这里找到很好的教程% http://www.appcoda.com/customize-navigation-status-bar-ios-7/?utm_campaign=iOS_Dev_Weekly_Issue_118&utm_medium=email&utm_source=iOS%2BDev%2BWeekly
基本思想是创建 NSDictionary 实例并用您想要的字体和其他属性填充它。 我完成了这个解决方案:
在 [super viewDidLoad] 之后的 -viewDidLoad 控制器方法中放入以下行:
UIColor *color = [UIColor redColor];
NSShadow *shadow = [NSShadow new];
UIFont *font = [UIFont fontWithName:@"EnterYourFontName" size:20.0]
shadow.shadowColor = [UIColor greenColor];
shadow.shadowBlurRadius = 2;
shadow.shadowOffset = CGSizeMake(1.0f, 1.0f);
//fill this dictionary with text attributes
NSMutableDictionary *topBarTextAttributes = [NSMutableDictionary new];
//ios 7
topBarTextAttributes[NSForegroundColorAttributeName] = color;
//ios 6
topBarTextAttributes[UITextAttributeTextColor] = color;
//ios 6
topBarTextAttributes[UITextAttributeTextShadowOffset] = [NSValue valueWithCGSize:shadow.shadowOffset];
topBarTextAttributes[UITextAttributeTextShadowColor] = shadow.shadowColor;
//ios 7
topBarTextAttributes[NSShadowAttributeName] = shadow;
//ios 6
topBarTextAttributes[UITextAttributeFont] = font;
//ios 7
topBarTextAttributes[NSFontAttributeName] = font;
//for all the controllers uncomment this line
// [[UINavigationBar appearance]setTitleTextAttributes:topBarTextAttributes];
//for current controller uncoment this line
// self.navigationController.navigationBar.titleTextAttributes = topBarTextAttributes;
【讨论】:
【参考方案6】:在iOS8 swift中,使用如下代码设置字体:
var navigationBarAppearance = UINavigationBar.appearance()
let font = UIFont(name: "Open Sans", size: 17)
if let font = font
navigationBarAppearance.titleTextAttributes = [NSFontAttributeName: font, NSForegroundColorAttributeName: UIColor.whiteColor()]
【讨论】:
【参考方案7】:适用于 iOS 13 和 Swift 5。
要设置标题颜色和字体,只需在 viewDidLoad() 中添加以下行:
UINavigationBar.appearance().titleTextAttributes = [
.foregroundColor: UIColor.white,
.font: UIFont(name: "Arial", size: 24)! ]
用于设置栏按钮项文本颜色和字体:
UIBarButtonItem.appearance().setTitleTextAttributes([
.foregroundColor: UIColor.white,
.font: UIFont(name: GetFontNameBold(), size: 40)! ],
for: UIControl.State.normal)
【讨论】:
以上是关于更改 UINavigationBar 字体属性?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中更改 UINavigationBar 字体
以编程方式更改 UINavigationbar 背景颜色和标题字体/颜色