2015-05-27 16 views
11

Otrzymuję szerokość UILabel [po tekst został ustawiony] z:Jak uzyskać prawidłową szerokość UILabel po ustawieniu tekstu?

myUILabel.frame.width 

Ale zawsze tej samej szerokości, bez względu na to, czy posiada ona ciągu: "Hello." lub wyrażenie: "Hello everyone on this planet.". Ale UILabel musi mieć większą szerokość z drugim ciągiem.

+0

użyć [myUILabel sizeToFit]; również możemy obliczyć szerokość za pomocą jak http://stackoverflow.com/questions/1340667/pixelwidth-of-the-text-in-a-uilabel – Venkat

+0

Do czego potrzebujesz szerokość? Czy używasz automatycznego układu? Jeśli korzystasz z automatycznego układu, możesz się go pozbyć, grając z priorytetem dopasowania zawartości, dzięki czemu frame.width zwróci poprawną wartość. –

+0

Możesz przyjrzeć się wewnętrznemu rozmiarowi zawartości etykiety, który ma związek z automatycznym układem i ograniczeniami układu. Po prostu google, może nawet chcesz użyć automatycznego układu, gdy chcesz poznać szerokość etykiety. – borchero

Odpowiedz

26

Spróbuj myUILabel.intrinsicContentSize(). Najpierw oczywiście ustaw czcionkę.

0

Należy użyć [label sizeToFit]

sizeToFit na etykiecie potrwają etykietę, aby dostosować tekst.

Drugim rozwiązaniem jest obliczenie szerokości napisu i zmiana układu etykiety na podstawie szerokości łańcuchów.

Na drugim roztworze można obliczyć wielkość napisu jako

CGSize strSize = CGSizeZero; 

CGSize minSize = CGSizeZero; 

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
{ 
    NSAttributedString *attributedText = [[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: label.font}] autorelease]; 
    CGRect rect = [attributedText boundingRectWithSize:constraintSize 
               options:NSStringDrawingUsesLineFragmentOrigin 
               context:nil]; 
    strSize = rect.size; 
} 
else 
{ 
    strSize = [text sizeWithFont:label.font constrainedToSize:constraintSize]; 
} 
Powiązane problemy