2013-09-27 27 views
6

Niedawno zaktualizowałem moją aplikację do iOS 7 przy użyciu XCode 5 i odkryłem, że boundingReadWithSize daje różne wysokości (w części wielkości), obliczając granice przypisanych łańcuchów.NSAttributedString boundingRectWithSize daje różne wysokości między iOS 6 a iOS 7

Poniższy wiersz daje mi różne wyniki pomiędzy iOS 6 i iOS. 7:

CGRect rect = [self boundingRectWithSize:CGSizeMake(inWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 

„ja” jest NSAttributedString i „inWidth” to maksymalna szerokość w pikselach łańcuch powinien pasować

Myślę, że to dlatego, że iOS 7 ma inną obsługę czcionek niż iOS 6.

Ktoś ma działające rozwiązanie do obliczania wysokości napisu na obu wersjach iOS?

+0

Może ten link powinien pomóc http://stackoverflow.com/questions/19028743/ios7-uitextview-contentsize-height-alternative/19067476#19067476 – rajdurai

Odpowiedz

1

Miałem ten sam problem, dla mnie prosty sufit() na wysokości rozwiązał go. Pamiętaj też o ustawieniu właściwych atrybutów dla przypisanego ciągu znaków, np.

@{NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName : label.font} 
+0

Jest to również funkcja-dokumentacji: w iOS 7 i później ta metoda zwraca rozmiary ułamkowe (w komponencie wielkości zwróconego CGRect); aby użyć zwróconych do rozmiaru widoków, należy użyć jego wartości do najbliższej większej liczby całkowitej za pomocą funkcji ceil. Ale: w iOS 6 mam np. 18 i z iOS 7 dostaję 16,799999 - więc ceil() daje mi 17. I to jest tylko dla pojedynczego wiersza tekstu, z tekstem wielowierszowym staje się jeszcze gorszy. – Heiko

7

Ponieważ nie możemy używać sizeWithAttributes dla wszystkich iOS większych niż 4.3, musimy napisać kod warunkowy dla 7.0 i poprzedniego iOS. Więc proponuję używać danego rozwiązania

UILabel *gettingSizeLabel = [[UILabel alloc] init]; 
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16]; 
gettingSizeLabel.text = @"YOUR TEXT HERE"; 
gettingSizeLabel.numberOfLines = 0; 
CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirement 

CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize]; 

Opcja jest całkiem dobrze i działa płynnie na wszystkich iOS bez kodu warunkowego.