在具有下标的UILabel上调用方法sizeToFit不起作用

时间:2012-01-07 00:11:12

标签: objective-c ios nsstring uilabel

我有一个UILabel的子类,它应该在用户输入内容时更新其文本。当然,随着文本长度的增加,标签的大小必须调整以适应文本。我调用了sizeToFit方法,当标签正确调整其宽度时,文本的底部被切断。问题是文本包含下标和上标,并且标签没有考虑下标(例如,使用H 2O,两者的底部被切断)。

我可以覆盖sizeToFit或sizeThatFits:来增加标签的高度吗?

编辑:

- (void) addCompound {

self.currentLabel = [[FormulaLabel alloc] initWithFrame:CGRectMake(10, 10, 100, 50)];

[self addSubview:self.currentLabel];

[self.currentLabel sizeToFit];

// Right now self.currentlabel.text = "". However, I've confirmed thru NSLogging that letters are added to self.currentLabel.text as the user types on the keyboard. Also, the text displays properly (as long as it's within the original frame) when I remove [sel.currentLabel sizeToFit]

}

2 个答案:

答案 0 :(得分:2)

您应该覆盖子类中的UILabel方法(CGSize)sizeThatFits:(CGSize)大小,如下例所示。我只需将10pt加到UILabel计算的高度以容纳下标。

@implementation ESKLabel
- (CGSize)sizeThatFits:(CGSize)size
{
    CGSize theSize = [super sizeThatFits:size];
    return CGSizeMake(theSize.width, theSize.height + 10);
}
@end

示例输出:

self.eskLabel.text = @"Hello Long² Long\u2082 World";
NSLog(@"CGSize: %@", NSStringFromCGSize(self.eskLabel.frame.size));
[self.eskLabel sizeToFit];
NSLog(@"CGSize: %@", NSStringFromCGSize(self.eskLabel.frame.size));

来自NSLog:

This GDB was configured as "x86_64-apple-darwin".sharedlibrary apply-load-rules all Attaching to process 864. 
2012-01-06 23:34:21.949 Stackoverflow4[864:f803] CGSize: {85, 61} 
2012-01-06 23:34:21.951 Stackoverflow4[864:f803] CGSize: {302, 44} 
kill 
quit

答案 1 :(得分:-1)

这应该是诀窍:

self.eskLabel.adjustsFontSizeToFitWidth = YES;