11

我知道如何在 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);
4

7 回答 7

20

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

目标-C:

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

迅速:

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

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

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

<UICTFont: 0x7fa865c05390> 字体系列: ".SFUIDisplay"; 字体粗细:正常;字体样式:正常;字体大小:34.00pt

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

于 2017-11-10T15:30:33.463 回答
5

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

在此处输入图像描述

无需在这里编码:)

于 2017-11-09T22:56:19.803 回答
5

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

UIFont.systemFont(ofSize: 34, weight: .bold)
于 2019-12-22T18:30:21.950 回答
3

iOS12大标题 系统加粗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];
于 2019-03-13T12:26:31.533 回答
3

尝试这样的事情:

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

于 2019-08-21T13:30:57.860 回答
1

最简单的方法是使用

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

于 2020-09-29T08:47:01.303 回答
0

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

[UIFont systemFontOfSize:32 weight:UIFontWeightBold]

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

于 2017-11-09T23:26:04.633 回答