2012-01-07 12 views
5

Mam podklasę UILabel, która ma aktualizować swój tekst, gdy użytkownik coś pisze. Naturalnie, wraz ze wzrostem długości tekstu, rozmiar etykiety musi się dostosować, aby pomieścić tekst. Nazwałem metodę sizeToFit, a gdy etykieta dostosowuje jej szerokość poprawnie, dolna część tekstu jest obcięta. Problem polega na tym, że tekst zawiera indeksy dolne i górne, a etykieta nie dostosowuje się do rozpatrywanych indeksów dolnych (na przykład przy pomocy H₂O dno z nich jest obcięte).Metoda wywołania sizeToFit na UILabel z indeksem nie działa

Czy mogę przesłonić sizeToFit lub sizeThatFits: aby zwiększyć wysokość etykiety?

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] 

} 
+0

przepisać sizeToFit i po [Super sizeToFit]; zmień wysokość – SAKrisT

+0

@SAKrisT '- (void) sizeToFit { [super sizeToFit]; self.frame = CGRectMake (self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 100); } ' – Mahir

+1

@SAKrisT Próbowałem, ale widok się nie pojawił – Mahir

Odpowiedz

2

należy zastąpić metodę UILabel (CGSize) sizeThatFits: (CGSize) Rozmiar w podklasie jak przykład poniżej. Dodaję 10pt do wysokości obliczonej przez UILabel, aby pomieścić indeks dolny.

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

Przykładowe wyjście:

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)); 

Z 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

Powinno to do trick:

self.eskLabel.adjustsFontSizeToFitWidth = YES; 
Powiązane problemy