W iOS 7 metoda:
- (CGSize)sizeWithFont:(UIFont *)font
constrainedToSize:(CGSize)size
lineBreakMode:(NSLineBreakMode)lineBreakMode
i metoda:
- (CGSize)sizeWithFont:(UIFont *)font
są przestarzałe. Jak mogę wymienić
CGSize size = [string sizeWithFont:font
constrainedToSize:constrainSize
lineBreakMode:NSLineBreakByWordWrapping];
i:
CGSize size = [string sizeWithFont:font];
-sizeWithAttributes:
.Odpowiedzi:
Możesz spróbować tego:
Po prostu zmień „FONT” na „[czcionka UIFont ....]”
źródło
NSLineBreakByWordWrapping
pójdzie w ciąguNSParagraphStyle
. Na przykład:NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
w atrybutach musiałbyś wtedy dodaćNSParagraphStyleAttributeName: paragraphStyle.copy
...boundingRectWithSize:options:attributes:context:
zwraca wartości ułamkowe. Musisz zrobićceil(textRect.size.height)
iceil(textRect.size.width)
odpowiednio, aby uzyskać rzeczywistą wysokość / szerokość.Ponieważ nie możemy użyć sizeWithAttributes dla wszystkich iOS większych niż 4.3, musimy napisać kod warunkowy dla 7.0 i wcześniejszych iOS.
1) Rozwiązanie 1:
2) Rozwiązanie 2
Pierwszym rozwiązaniem jest czasem nie zwrócenie właściwej wartości wysokości. więc użyj innego rozwiązania. który będzie działał idealnie.
Druga opcja jest całkiem dobra i działa płynnie we wszystkich iOS bez kodu warunkowego.
źródło
Oto proste rozwiązanie:
Wymagania:
Teraz jako
constrainedToSizeusage:lineBreakMode:
użycie jest przestarzałe w iOS 7.0 :Teraz użycie w większej wersji iOS 7.0 będzie:
źródło
Poniżej znajdują się dwie proste metody, które zastąpią te dwie przestarzałe metody.
A oto odpowiednie referencje:
Jeśli używasz NSLineBreakByWordWrapping, nie musisz określać NSParagraphStyle, ponieważ jest to ustawienie domyślne: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/index. html # // apple_ref / occ / clm / NSParagraphStyle / defaultParagraphStyle
Musisz uzyskać górną granicę rozmiaru, aby dopasować wyniki przestarzałych metod. https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSString_UIKit_Additions/#//apple_ref/occ/instm/NSString/boundingRectWithSize:options:attributes:context :
źródło
W większości przypadków użyłem metody sizeWithFont: constrainedToSize: lineBreakMode: aby oszacować minimalny rozmiar UILabel, aby pomieścić jego tekst (szczególnie, gdy etykieta musi być umieszczona wewnątrz UITableViewCell) ...
... Jeśli tak jest , możesz po prostu użyć metody:
Mam nadzieję, że to pomoże.
źródło
źródło
[Zaakceptowana odpowiedź działa ładnie w kategorii. Zastępuję przestarzałe nazwy metod. Czy to dobry pomysł? Wydaje się, że działa bez reklamacji w Xcode 6.x]
Działa to, jeśli cel wdrożenia to 7.0 lub nowszy. Kategoria to
NSString (Util)
NSString + Util.h
NSString + Util. M
źródło
z dwóch odpowiedzi 1 + 2
źródło