To jest inne podejście. Znajdź minimalny rozmiar tekstu, aby nie był zawijany do więcej niż jednej linii. Jeśli zawija się do jednej linii, możesz dowiedzieć się, używając wysokości.
Można użyć tego kodu:
CGSize maximumSize = CGSizeMake(300, 9999);
NSString *myString = @"This is a long string which wraps";
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize myStringSize = [myString sizeWithFont:myFont
constrainedToSize:maximumSize
lineBreakMode:self.myLabel.lineBreakMode];
300 to szerokość ekranu z trochę miejsca na marginesach. Powinieneś zastąpić własne wartości dla czcionki i rozmiaru, a dla lineBreakMode
, jeśli nie używasz IB.
Teraz myStringSize
będzie zawierał height
, który możesz sprawdzić na wysokości czegoś, co wiesz, że ma tylko 1 linię wysokości (używając tej samej czcionki i rozmiaru). Jeśli jest większy, musisz wyciąć tekst. Zauważ, że powinieneś dodać ciąg znaków do ciągu znaków, zanim go ponownie sprawdzisz (dodanie ... może spowodować ponowne przekroczenie limitu).
Umieść ten kod w pętli, aby wyciąć tekst, a następnie ponownie sprawdź poprawną wysokość.
Wielkie dzięki! Twoja odpowiedź była prawidłowa, a sztuczka dodania "..." przed ponownym sprawdzeniem rozmiaru była rozsądna. – camilo
Na iOS 7 powinieneś sprawdzić [tę odpowiedź] (http://stackoverflow.com/a/18951386/3965) –
jest przestarzały po ios7, powinieneś użyć boundingRectWithSize: .. – 7heaven