在具有下标的UILabel上调用方法sizeToFit不起作用 [英] Calling method sizeToFit on a UILabel that has subscripts is not working
问题描述
我有UILabel的子类,应该在用户键入内容时更新其文本.自然,随着文本长度的增加,标签的大小必须进行调整以适应文本.我调用了sizeToFit方法,虽然标签正确地调整了宽度,但文本的底部被切除了.问题在于文本包含下标和上标,并且标签未考虑到下标(例如,使用H 2 O时,两者的底部都被切除了).
我可以覆盖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]
}
您应该在子类中覆盖UILabel方法(CGSize)sizeThatFits:(CGSize)size,如下例所示.我只是在UILabel计算的高度上加上10pt来容纳下标.
@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
I have a subclass of UILabel, which is supposed to update its text when the user types something. Naturally, as the length of text increases, the size of the label must adjust to accommodate the text. I called the sizeToFit method, and while the label adjusts its width correctly, the bottom of the text is cut off. The problem is that the text includes subscripts and superscripts , and the label is not adjusting itself with the subscripts in consideration (for example, with H₂O the bottom of the two is cut off).
Can I override sizeToFit or sizeThatFits: to increase the height of the label?
EDIT:
- (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]
}
You should override the UILabel method (CGSize)sizeThatFits:(CGSize)size in your subclass like example below. I just add 10pt to the height calculated by UILabel to accommodate the subscript.
@implementation ESKLabel
- (CGSize)sizeThatFits:(CGSize)size
{
CGSize theSize = [super sizeThatFits:size];
return CGSizeMake(theSize.width, theSize.height + 10);
}
@end
Sample output:
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));
From the 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
这篇关于在具有下标的UILabel上调用方法sizeToFit不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!