在 iOS 中使用大小类缩放 NSAttributedString

Posted

技术标签:

【中文标题】在 iOS 中使用大小类缩放 NSAttributedString【英文标题】:Scaling NSAttributedString with Size Classes in iOS 【发布时间】:2015-08-22 20:39:30 【问题描述】:

我正在使用NSAttributedStringUILabel 的一部分设为粗体,并且我一直在研究如何在不同大小类别之间缩放字体。

我目前看到的唯一方法是在添加属性时使用标签的现有字体大小:

CGFloat fontSize = self.label.font.pointSize;
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"Abc Abc"];
[string addAttribute:NSFontAttributeName
                   value:[UIFont boldSystemFontOfSize:fontSize]
                   range:NSMakeRange(0,3)];
self.label.attributedText = string;

澄清一下:label 是一个带有常规系统字体的UILabel,属性字符串用于将前 3 个字母加粗。

这工作得相当好,但将属性字符串的创建与标签结合在一起。有没有办法在不预先知道字体大小的情况下缩放属性字符串?

【问题讨论】:

我一直在使用属性搅拌,如果我使用属性字符串,我在制作标签时从不声明 UILabel 的字体。我不确定我是否理解您在做什么,因为只要您没有为字符串设置字体大小或常规文本,标签就会自行调整为属性字符串 我在示例下方添加了说明。 UILabel 有一个常规字体,我想把它的一部分加粗,我认为如果不设置整个字体属性我不能在 ios 中做到这一点。 哦,我明白了,是的,所以您要么使用 AttributedString 属性设置文本,要么以常规方式设置文本。我从来没有将其作为“一半和一半”操作来完成,如果您没有为标签设置任何内容,但您只是设置了属性文本属性,然后标签会调整大小,我可以通过调试器记录的示例向您展示那是巨大的,并且使用了大量的属性字符串属性,然后记录与属性字符串字体匹配的 UILabel 字体,如果您想查看它。告诉我。 如果您在 GitHub 或类似网站上有示例,我很乐意查看。 是的,我会发布一些东西,等等,我想给你一个答案,但问题是你的问题并没有真正的答案,我只是认为你需要重新考虑你是怎么做到的,一秒钟。 【参考方案1】:

在与@Larcerax 讨论后,我发现我可以在Interface Builder 中使用UILabel 上的Autoshrink 属性来确保字体适当缩小,这给出了(有点脏)的解决方案使用可以缩小的最大字体大小:

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"Abc Abc"];
[string addAttribute:NSFontAttributeName
               value:[UIFont boldSystemFontOfSize:200.0]
               range:NSMakeRange(0,3)];
self.label.attributedText = string;

不过,这确实需要提前确定最大尺寸。

【讨论】:

以上是关于在 iOS 中使用大小类缩放 NSAttributedString的主要内容,如果未能解决你的问题,请参考以下文章

如何缩放视图并将自定义边框保持在原始大小\缩放?

iOS - 如何正确缩放具有不同图像大小的 UIButton(如 Facebook 新闻提要)?

ios webview怎么适配html的大小

位于虚拟键盘下方的 iOS 7.1 输入字段强制缩放焦点

响应式 HTML5 视频 - 在 iOS 中调整大小

使用 Xamarin Forms 缩放 UWP 图像