iOS 11 中 UINavigationBar 大标题的默认字体?

Posted

技术标签:

【中文标题】iOS 11 中 UINavigationBar 大标题的默认字体?【英文标题】:Default Font for UINavigationBar Large Title in iOS 11? 【发布时间】:2017-11-09 22:45:46 【问题描述】:

我知道如何在 ios 11 中为大标题设置颜色和更改字体,但我很难找到大标题的默认字体和字体大小。我想在应用程序的其他地方重现字体。我尝试了以下方法,但它们没有给出字体或字体大小的结果。不知道我应该在哪里寻找这个。

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);

【问题讨论】:

【参考方案1】:

获取大标题字体的正确解决方案如下:

目标-C:

UIFont *font = [UIFont preferredFontForTextStyle: UIFontTextStyleLargeTitle];
NSLog("%@", font);

斯威夫特:

let font = UIFont.preferredFont(forTextStyle: .largeTitle)
print(font)

即使用户在“设置”应用中应用了各种可访问性和字体大小更改,这也会给出正确的值。

上面会默认打印出以下内容(在操场上):

字体系列: ".SFUIDisplay";字体粗细:正常;字体样式:正常;字体大小:34.00pt

请注意,上述代码中 .largeTitle 的使用只能在 iOS 11 中调用。如果您的应用支持 iOS 10 或更早版本,则必须将该代码包装在正确使用 @available 中。

【讨论】:

【参考方案2】:

在 iOS 13 上,这是用于导航栏中大标题的确切字体。我逐像素比较了屏幕截图,结果完全匹配!

UIFont.systemFont(ofSize: 34, weight: .bold)

【讨论】:

【参考方案3】:

编辑: 我打开了用户界面检查器,它说:

这里不需要编码:)

【讨论】:

这如何回答这个问题?问题是询问iOS 11中大导航标题的默认字体和字体大小是多少。这个答案显示了如何在12点处获取系统(和粗体系统)字体。完全不是一回事。 他的愿望是“在应用程序的其他地方复制字体”,这可以帮助他做到这一点。 @rmaddy 我改变了答案。 @palme 您的编辑有正确的答案。请删除错误的部分,会有更多人点赞。 好主意,我把它移到了顶部。【参考方案4】:

iOS12 大标题 System Bold 34(旧金山)

[UIFont boldSystemFontOfSize:34]

iOS9 - iOS12 System Semibold 17(旧金山)

[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]

iOS8 System Semibold 17 (Helvetica Neue)

[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]

iOS7 System Bold 17 (Helvetica Neue)

[UIFont boldSystemFontOfSize:17];

【讨论】:

iOS14,我得到了-> <UICTFont: 0x7fd31e407f40> font-family: "UICTFontTextStyleTitle0"; font-weight: normal; font-style: normal; font-size: 34.00pt【参考方案5】:

试试这样的:

if #available(iOS 11.0, *) navigationBar.largeTitleTextAttributes = [.foregroundColor: UIColor.white, .font: UIFont(name: "HelveticaNeue-Bold", size: 20)!]

【讨论】:

【参考方案6】:

最简单的方法是使用

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 文本样式的值也会发生变化,您的标题将获得正确的样式。

【讨论】:

【参考方案7】:

我实际上是通过尝试不同的字体和大小找到了答案。现在,免责声明,这可能会随着可访问性/动态字体大小而改变。但是我找到的字体和大小是

[UIFont systemFontOfSize:32 weight:UIFontWeightBold]

我仍然想找到一种以编程方式获取此信息的方法,并等待接受答案,希望有人知道如何做到这一点。同时,希望这对某人有所帮助。

【讨论】:

看我的回答。它实际上是 [UIFont systemFontOfSize: 36.0 weight: UIFontWeightBold] 不确定您使用的是什么应用程序,但我发现我自己的应用程序(正在开发中)正在使用的大小。我通过在一个选项卡上设置 navigationBar 的 largeTitleTextAttributes 来完美匹配它,然后将该选项卡上的标题设置为使用默认属性的另一个选项卡的标题,然后使用属性直到标题完美排列。 你是对的。我突出显示了错误的标签。大小为 34。

以上是关于iOS 11 中 UINavigationBar 大标题的默认字体?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入 UISplitViewController 时,UINavigationBar 中缺少 iOS11 UISearchBar

iOS 11 中 UINavigationBar 大标题的默认字体?

如何在 iOS 11 中引入的 UINavigationBar 的大标题视图上添加自定义视图

推送的 ViewController 中的 iOS 11 UINavigationBar 透明度

如何在IOS 11中为新的大型条设置渐变颜色的UINavigationbar?

iOS 11:大标题的 UINavigationBar 高度(模仿 Apple Music 应用)