Вызов метода sizeToFit для UILabel с индексами не работает

У меня есть подкласс UILabel, который должен обновлять свой текст, когда пользователь что-то вводит. Естественно, что по мере увеличения длины текста размер метки должен корректироваться, чтобы вместить текст. Я вызвал метод sizeToFit, и, хотя метка правильно регулирует свою ширину, нижняя часть текста обрезается. Проблема в том, что текст включает подстрочные и надстрочные индексы, а метка не корректируется с учетом подстрочных индексов (например, с H₂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]

}

person Mahir    schedule 07.01.2012    source источник
comment
переписать sizeToFit и после [super sizeToFit]; изменить высоту   -  person Volodymyr B.    schedule 07.01.2012
comment
@SAKrisT - (void)sizeToFit { [super sizeToFit]; self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 100); }   -  person Mahir    schedule 07.01.2012
comment
@SAKrisT Я пробовал, но вид не отображается   -  person Mahir    schedule 07.01.2012


Ответы (2)


Вы должны переопределить размер метода UILabel (CGSize) sizeThatFits: (CGSize) в своем подклассе, как в примере ниже. Я просто добавляю 10 пунктов к высоте, рассчитанной 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
person Ken W    schedule 07.01.2012

Это должно помочь:

self.eskLabel.adjustsFontSizeToFitWidth = YES;
person Ellen S    schedule 08.05.2013