有没有办法找到 UINavigationBar 标题的字体和框架大小?

Posted

技术标签:

【中文标题】有没有办法找到 UINavigationBar 标题的字体和框架大小?【英文标题】:Is there any way of finding the font & frame size of the UINavigationBar title? 【发布时间】:2011-05-17 11:49:06 【问题描述】:

是否有任何方式以编程方式返回导航控制器标题栏的字体和大小(例如 self.title.frame.sizeself.title.font,尽管我不知道这些都有效)?

(如果您想知道原因,我想在截断标题之前使用 NSString sizeWithFont 方法来计算标题中可以容纳多少文本。我可以通过物理测量来做到这一点我自己的字体和框架大小(例如,我认为它是 Helvetica 15),但我希望实际标题报告它自己的字体和大小,以使我的应用程序适应未来。)

【问题讨论】:

【参考方案1】:

ios 5.0 开始,UINavigationBar 有一个名为 titleTextAttributes 的属性。这是一个包含NSString UIKit Additions Reference 描述的属性的字典。

如果我在我的一个项目中打印出这本字典,我会得到以下信息:

Font = "<UICFFont: 0x998e690> font-family: \".Helvetica NeueUI\"; font-weight: bold; font-style: normal; font-size: 20px";
TextColor = "UIDeviceWhiteColorSpace 0.2 1";
TextShadowColor = "UIDeviceWhiteColorSpace 0 0";
TextShadowOffset = "UIOffset: 0, 0";

...显示 20 像素的粗体默认系统字体。您也可以根据需要更改这些设置。

【讨论】:

【参考方案2】:

我已经弄清楚了如何获得框架:

self.navigationItem.titleView.frame.size

只留下字体。我的研究表明它是 20 号的系统字体,但我希望它能够自我报告。

编辑——这很奇怪。如果我这样做......

 self.title = @"test";
 NSLog(@"Width is: %f", self.navigationItem.titleView.frame.size.width);

...我从 NSLog 中得到随机的负数。所以看起来标题框架不正确。

【讨论】:

仅供参考:字体是系统字体,要么是 Helvetica Helvetica-Neue(Apple 在 iOS 4 到来时切换了系统字体沿)。 titleView 是一个 UIView,它有一个字体属性。 @Lou 如果我尝试self.navigationItem.titleView.font,我会得到在“UIView”类型的对象上找不到属性“字体” 抱歉,我以为它会是一个 UILabel -- UINavBarPrompt 没有公开字体 -- 看起来它是硬编码到实现中的。 @lxt 说它是系统字体——你可以查一下。 @Lou 谢谢 - 我将不得不对其进行硬编码。我只是希望我能让它返回自己的字体,以防苹果将来做出改变。

以上是关于有没有办法找到 UINavigationBar 标题的字体和框架大小?的主要内容,如果未能解决你的问题,请参考以下文章

eclipse中的maven项目因jar包没有引用标红解决办法

显示 UINavigationBar 不起作用

NavigationBar 标题为黑色

iOS 7:禁用整个应用程序的 UINavigationBar 半透明

Spotify - 有没有办法以编程方式将曲目星标设置为真? [关闭]

UINavigationBar 的标题不会随着 push segue 的转换而改变