UILabel - 替代已弃用方法“adjustsLetterSpacingToFitWidth”

6

在我的代码中,我正在检查我的字符是否适合我的标签,并有以下语句:

return self.adjustsLetterSpacingToFitWidth;

这段代码放置在UILabel的实现中。有人可以告诉我确切的替代方案是什么吗?文档说- 使用NSKernAttributeName,但我并没有完全理解。有人能帮助我吗?

更广义地说- 方法被称为:

xLab.adjustLetterSpacingToFitWidth = YES;

在我的代码中,我有以下内容:
@implementation UILabel ()
- (BOOL) getter {
    return self.adjustsLetterSpacingToFitWidth;
}

- (void) setter:(BOOL) setVal {
     self.adjustsLetterSpacingToFitWidth = setVal;
}
@end
1个回答

8
首先,你的getter和setter方法完全是多余的;无论何时调用getter或setter方法,都可以直接获取/设置adjustsLetterSpacingToFitWidth属性。
至于如何使用NSKernAttributeName实现自动字距调整,Apple的文档中指出:“要在标签中打开自动字距调整,请将字符串的NSKernAttributeName设置为[NSNull null]”,因此,你可以这样做:
NSMutableAttributedString *s;
s = [[NSMutableAttributedString alloc] initWithString:my_uilabel.text];
[s addAttribute:NSKernAttributeName
          value:[NSNull null]
          range:NSMakeRange(0, s.length)];
my_uilabel.attributedText = s;

但是,如果你不想自动调整字母间距,而是想要找出文本是否适合标签,你可能需要检查NSString UIKit additions中的各种方法。(这个猜测是基于原始问题的措辞。)


嗯...所以在检查ui_label.text之后,我是否应该检查从NSKernAttributeName获得的值是否为非零,以便像Getter中看到的那样返回布尔值?非常感谢您的帮助。 - gran_profaci
@gran_profaci 您需要获取属性attributedText并检查它是否在整个字符串范围内设置了属性NSKernAttributeName[NSNull null],以了解自动字距是否已启用。请注意,可能仅对字符串的一半或不同部分设置属性等。 - Arkku
我需要枚举它吗?然后检查值是否为非零? - gran_profaci
@gran_profaci 请查看NSAttributedString类以获取有关如何获取字符串属性的方法。要检测自动字距,您需要检查该值是否完全为[NSNull null]。同一属性可能存在不同(且非零)值以设置手动字距。同一属性可以在同一字符串的不同位置上多次存在。我几乎可以确定您甚至不想做您计划要做的事情,在任何情况下,属性字符串并不完全映射到您试图模拟的旧行为。 - Arkku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接