Mam UIButton
z tekstem „Przeglądaj aplikację” i UIImage
(>) W Interface Builder
wyglądzie:
[ (>) Explore the app ]
Ale muszę to umieścić UIImage
PO tekście:
[ Explore the app (>) ]
Jak mogę przesunąć UIImage
w prawo?
ios
iphone
cocoa-touch
uibutton
imageedgeinsets
Pavel Yakimenko
źródło
źródło
Odpowiedzi:
Moje rozwiązanie jest dość proste
źródło
W iOS 9 i nowszych wydaje się, że prostym sposobem osiągnięcia tego jest wymuszenie semantyki widoku.
Lub programowo, używając:
źródło
semanticContentAttribute
w naszej logice układu, zamiast zmianysemanticContentAttribute
samego siebie. (zmiana podejścia semantycznego, nie będzie działać dobrze z internacjonalizacją)Ustaw
imageEdgeInset
i,titleEdgeInset
aby przesuwać komponenty w obrębie obrazu. Możesz także utworzyć przycisk przy użyciu pełnowymiarowej grafiki i użyć go jako obrazu tła przycisku (następnie użyj,titleEdgeInsets
aby przesunąć tytuł).źródło
Odpowiedź Raymonda W. jest tutaj najlepsza. Podklasa UIButton z niestandardowym układemSubviews. Niezwykle proste do zrobienia, oto implementacja layoutSubviews, która zadziałała dla mnie:
źródło
A co z podklasą
UIButton
i nadpisywaniemlayoutSubviews
?Następnie przetwarzanie końcowe lokalizacji
self.imageView
&self.titleLabel
źródło
Innym prostym sposobem (który NIE jest tylko iOS 9) jest podklasa UIButton, aby zastąpić te dwie metody
contentEdgeInsets
jest już brane pod uwagę przy użyciu super.źródło
Wymuszanie „od prawej do lewej” dla przycisku nie jest opcją, jeśli Twoja aplikacja obsługuje zarówno „od lewej do prawej”, jak i „od prawej do lewej”.
Rozwiązanie, które u mnie zadziałało, to podklasa, którą można dodać do przycisku w Storyboard i dobrze współpracuje z ograniczeniami (testowane w iOS 11):
Gdzie „dopełnienie” oznaczałoby przestrzeń między tytułem a obrazem.
źródło
.forceRightToLeft
jest opcja! Po prostu użyj przeciwnej wartości (.forceLeftToRight
), jeśliUIApplication.shared.userInterfaceLayoutDirection == .rightToLeft
.W Swift:
źródło
Opierając się na odpowiedzi @split ...
Odpowiedź jest fantastyczna, ale ignoruje fakt, że przycisk może mieć niestandardowe wstawki obrazu i tytułu, które są ustawione wcześniej (np. W scenorysie).
Na przykład możesz chcieć, aby obraz miał dopełnienie od góry i dołu kontenera, ale nadal przesuwaj obraz na prawą stronę przycisku.
Rozszerzyłem koncepcję tą metodą: -
źródło
Spowoduje to utworzenie przycisku wyrównanego do prawej strony, na przykład:
Przycisk nie dopasowuje swojej szerokości do kontekstu, więc po lewej stronie etykiety pojawi się spacja. Możesz rozwiązać ten problem, obliczając szerokość ramki przycisku na podstawie właściwości buttonLabelSize.width i buttonImageSize.width.
źródło
źródło
To rozwiązanie działa na iOS 7 i nowszych
Po prostu podklasa UIButton
Użycie (gdzieś w twojej klasie):
źródło
Opierając się na wcześniejszych odpowiedziach. Jeśli chcesz mieć margines między ikoną a tytułem przycisku, kod musi się nieco zmienić, aby zapobiec unoszeniu się etykiety i ikony ponad granicami przycisków o rozmiarze wewnętrznym.
Ostatnia linia kodu jest ważna dla samoistnego obliczenia rozmiaru zawartości dla automatycznego układu.
źródło
Oto mój własny sposób, aby to zrobić (po około 10 latach)
źródło
Rozwiązanie jednoliniowe w Swift:
źródło