Извикването на метод 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)size във вашия подклас като примера по-долу. Просто добавям 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
person Ken W    schedule 07.01.2012

Това трябва да е трикът:

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