iOS 11 中 UINavigationBar 大标题的默认字体?
Default Font for UINavigationBar Large Title in iOS 11?
我知道如何在 iOS11 中设置大标题的颜色和更改字体,但我很难找到大标题的默认字体和字体大小。我想在应用程序的其他地方复制字体。我尝试了以下方法,但它们没有给出字体或字体大小的结果。不确定我还应该在哪里寻找这个。
NSLog(@"self.navigationController.navigationBar.largeTitleTextAttributes:%@",self.navigationController.navigationBar.largeTitleTextAttributes);
NSDictionary *dict = self.navigationController.navigationBar.largeTitleTextAttributes;
UIFont *font = [dict objectForKey:@"NSFontAttributeName"];
NSLog(@"font is.. %@, %@, %@",font,font.fontName,font.fontDescriptor);
编辑:
我打开了用户界面检查器,它显示:
这里不用写代码:)
我实际上是通过尝试不同的字体和大小找到了答案。现在,免责声明,这可能会随着 accessibility/dynamic 字体大小而改变。但是我找到的字体和大小是
[UIFont systemFontOfSize:32 weight:UIFontWeightBold]
我仍然想找到一种方法来以编程方式获得此信息,并将等待接受答案,希望有人知道如何做到这一点。同时,希望这对某人有帮助。
获得大标题字体的正确解决方案如下:
Objective-C:
UIFont *font = [UIFont preferredFontForTextStyle: UIFontTextStyleLargeTitle];
NSLog("%@", font);
Swift:
let font = UIFont.preferredFont(forTextStyle: .largeTitle)
print(font)
即使用户在“设置”应用中应用了各种辅助功能和字体大小更改,这也会给出正确的值。
以上默认情况下会打印出以下内容(在 playground 中):
<UICTFont: 0x7fa865c05390> font-family: ".SFUIDisplay"; font-weight: normal; font-style: normal; font-size: 34.00pt
请注意,在上面的代码中使用 .largeTitle
必须仅使用 iOS 11 调用。如果您的应用支持 iOS 10 或更早版本,则必须将该代码包装在正确使用 @available
.
iOS12 大标题
System Bold 34(旧金山)
[UIFont boldSystemFontOfSize:34]
iOS9 - iOS12
系统 Semibold 17(旧金山)
[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]
iOS8
系统半粗体 17 (Helvetica Neue)
[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]
iOS7
系统粗体 17 (Helvetica Neue)
[UIFont boldSystemFontOfSize:17];
尝试这样的事情:
if #available(iOS 11.0, *) {
navigationBar.largeTitleTextAttributes = [.foregroundColor: UIColor.white, .font: UIFont(name: "HelveticaNeue-Bold", size: 20)!]
}
在 iOS 13 上,这是用于导航栏中大标题的确切字体。我逐个像素比较屏幕截图,它完全匹配!
UIFont.systemFont(ofSize: 34, weight: .bold)
最简单的方法是使用
UIFont.preferredFont(forTextStyle: .largeTitle)
请记住,不是 UINavigationBar 的大标题,它是您自己视图中使用的一种样式,这就是重量减轻的原因。但是您可以对其施加预期的重量。
UIFont(descriptor: normalTitleFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalTitleFont.pointSize)
完整代码:
let normalTitleFont = UIFont.preferredFont(forTextStyle: .largeTitle)
let largeTitleFont = UIFont(descriptor: normalTitleFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalTitleFont.pointSize)
与硬编码大小或字体相比,这种方法更好。
用户可以更改设备上的辅助功能设置,硬编码值将被关闭。
.largeTitle 文本样式的值也会发生变化,您的标题将获得正确的样式。
我知道如何在 iOS11 中设置大标题的颜色和更改字体,但我很难找到大标题的默认字体和字体大小。我想在应用程序的其他地方复制字体。我尝试了以下方法,但它们没有给出字体或字体大小的结果。不确定我还应该在哪里寻找这个。
NSLog(@"self.navigationController.navigationBar.largeTitleTextAttributes:%@",self.navigationController.navigationBar.largeTitleTextAttributes);
NSDictionary *dict = self.navigationController.navigationBar.largeTitleTextAttributes;
UIFont *font = [dict objectForKey:@"NSFontAttributeName"];
NSLog(@"font is.. %@, %@, %@",font,font.fontName,font.fontDescriptor);
编辑: 我打开了用户界面检查器,它显示:
这里不用写代码:)
我实际上是通过尝试不同的字体和大小找到了答案。现在,免责声明,这可能会随着 accessibility/dynamic 字体大小而改变。但是我找到的字体和大小是
[UIFont systemFontOfSize:32 weight:UIFontWeightBold]
我仍然想找到一种方法来以编程方式获得此信息,并将等待接受答案,希望有人知道如何做到这一点。同时,希望这对某人有帮助。
获得大标题字体的正确解决方案如下:
Objective-C:
UIFont *font = [UIFont preferredFontForTextStyle: UIFontTextStyleLargeTitle];
NSLog("%@", font);
Swift:
let font = UIFont.preferredFont(forTextStyle: .largeTitle)
print(font)
即使用户在“设置”应用中应用了各种辅助功能和字体大小更改,这也会给出正确的值。
以上默认情况下会打印出以下内容(在 playground 中):
<UICTFont: 0x7fa865c05390> font-family: ".SFUIDisplay"; font-weight: normal; font-style: normal; font-size: 34.00pt
请注意,在上面的代码中使用 .largeTitle
必须仅使用 iOS 11 调用。如果您的应用支持 iOS 10 或更早版本,则必须将该代码包装在正确使用 @available
.
iOS12 大标题 System Bold 34(旧金山)
[UIFont boldSystemFontOfSize:34]
iOS9 - iOS12 系统 Semibold 17(旧金山)
[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]
iOS8 系统半粗体 17 (Helvetica Neue)
[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]
iOS7 系统粗体 17 (Helvetica Neue)
[UIFont boldSystemFontOfSize:17];
尝试这样的事情:
if #available(iOS 11.0, *) {
navigationBar.largeTitleTextAttributes = [.foregroundColor: UIColor.white, .font: UIFont(name: "HelveticaNeue-Bold", size: 20)!]
}
在 iOS 13 上,这是用于导航栏中大标题的确切字体。我逐个像素比较屏幕截图,它完全匹配!
UIFont.systemFont(ofSize: 34, weight: .bold)
最简单的方法是使用
UIFont.preferredFont(forTextStyle: .largeTitle)
请记住,不是 UINavigationBar 的大标题,它是您自己视图中使用的一种样式,这就是重量减轻的原因。但是您可以对其施加预期的重量。
UIFont(descriptor: normalTitleFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalTitleFont.pointSize)
完整代码:
let normalTitleFont = UIFont.preferredFont(forTextStyle: .largeTitle)
let largeTitleFont = UIFont(descriptor: normalTitleFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalTitleFont.pointSize)
与硬编码大小或字体相比,这种方法更好。
用户可以更改设备上的辅助功能设置,硬编码值将被关闭。
.largeTitle 文本样式的值也会发生变化,您的标题将获得正确的样式。