Chcę wyświetlić obraz obok UILabel, jednak UILabel ma zmienną długość tekstu, więc nie wiem, gdzie umieścić obraz. Jak mogę to osiągnąć?
142
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
Do czego służy - [NSString sizeWithFont: forWidth: lineBreakMode:]?
to pytanie może mieć twoją odpowiedź, zadziałało dla mnie.
W 2014 r. Redagowałem w tej nowej wersji, na podstawie bardzo przydatnego komentarza Norberta poniżej! To wszystko. Twoje zdrowie
// yourLabel is your UILabel.
float widthIs =
[self.yourLabel.text
boundingRectWithSize:self.yourLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName:self.yourLabel.font }
context:nil]
.size.width;
NSLog(@"the width of yourLabel is %f", widthIs);
[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
self.yourLabel.intrinsicContentSize
To da ci rozmiar zawartości etykiety, więc możesz po prostu uzyskać stamtąd szerokość.yourLabel.intrinsicContentSize.width
działa świetnie, sprawdź odpowiedź poniżej.yourLabel.intrinsicContentSize.width
dla Objective-C / Swiftźródło
Szybko
źródło
Wybrana odpowiedź jest prawidłowa dla iOS 6 i starszych.
W iOS 7
sizeWithFont:constrainedToSize:lineBreakMode:
został wycofany . Teraz zaleca się użycieboundingRectWithSize:options:attributes:context:
.Zwróć uwagę, że zwracana wartość to
CGRect
nieCGSize
. Mamy nadzieję, że będzie to pomocne dla osób używających go w iOS 7.źródło
W iOS8 sizeWithFont został wycofany, zapoznaj się z
Możesz dodać wszystkie atrybuty, które chcesz, w sizeWithAttributes. Inne atrybuty, które możesz ustawić:
i tak dalej. Ale prawdopodobnie nie będziesz potrzebować innych
źródło
Swift 4 Odpowiedz, kto używa ograniczenia
Swift 5 Odpowiedz, kto używa ograniczenia
źródło
źródło
Oto coś, co wymyśliłem po zastosowaniu kilku zasad do innych postów SO, w tym link Aarona:
W tym przykładzie dodaję niestandardową pinezkę do klasy MKAnnotation, która zmienia rozmiar UILabel zgodnie z rozmiarem tekstu. Dodaje również obraz po lewej stronie widoku, dzięki czemu część kodu zarządza odpowiednimi odstępami w celu obsługi obrazu i dopełnienia.
Kluczem jest użycie,
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
a następnie ponowne zdefiniowanie wymiarów widoku. Możesz zastosować tę logikę do dowolnego widoku.Chociaż odpowiedź Aarona działa dla niektórych, nie zadziałała dla mnie. Jest to znacznie bardziej szczegółowe wyjaśnienie, które powinieneś wypróbować bezpośrednio przed przejściem w inne miejsce, jeśli chcesz mieć bardziej dynamiczny widok z obrazem i zmiennym UILabel. Wykonałem już dla ciebie całą pracę !!
źródło