Mam kilka przycisków UIB, aw IB są ustawione na Aspect Fit, ale z jakiegoś powodu zawsze się rozciągają. Czy jest coś jeszcze, co musisz ustawić? Wypróbowałem wszystkie różne tryby widoku i żaden z nich nie działa, wszystkie są rozciągane.
ios
iphone
uibutton
aspect-fit
marty
źródło
źródło
Odpowiedzi:
Miałem ten problem wcześniej. Rozwiązałem to, umieszczając mój obraz w miejscu
UIImageView
, w którymcontentMode
ustawienia faktycznie działają, i dodając do tego przezroczysty niestandardowy elementUIButton
.EDYCJA: Ta odpowiedź jest przestarzała. Zobacz odpowiedź @Werner Altewischer, aby uzyskać poprawną odpowiedź w nowoczesnych wersjach iOS.
źródło
Rozwiązaniem jest ustawienie
contentMode
weimageView
właściwościUIButton
. AbyUIButton
to działało, należy utworzyć z typem niestandardowym (w przeciwnym razienil
jest zwracany dla tej właściwości).źródło
[button.imageView setContentMode:UIViewContentModeScaleAspectFit];
button.imageView!.contentMode = UIViewContentMode.scaleAspectFit
Ta metoda zadziałała dla mnie bardzo dobrze .:
W Xib wybierz przycisk i ustaw
user defined runtime attributes
:self.imageView.contentMode
Number
1
źródło
extension UIButton { @IBInspectable var imageContentMode: Int { get {return imageView?.contentMode.rawValue ?? 0} set {imageView?.contentMode = UIViewContentMode(rawValue: newValue) ?? .scaleAspectFit} } }
imageView.contentMode
działało na mnie!Jeśli robisz to w Interface Builder, możesz użyć Inspektora atrybutów środowiska wykonawczego, aby ustawić to bezpośrednio, bez żadnego kodu.
Ustaw ścieżkę klucza na przycisku na „imageView.contentMode” z typem „Number” i wartością „1” (lub w innym trybie, który chcesz).
źródło
Użyj imageView przycisku dla contentMode. Nie bezpośrednio na samym przycisku.
źródło
Jeśli umieścisz obraz w miejscu
UIImageView
za przyciskiem, stracisz wbudowaną funkcjonalnośćUIButton
klasy, taką jakadjustsImageWhenHighlighted
iadjustsImageWhenDisabled
, oraz oczywiście możliwość ustawiania różnych obrazów dla różnych stanów (bez mglistego robienia tego samodzielnie).Jeśli chcemy, aby obraz był nierozciągnięty dla wszystkich stanów kontrolnych , jednym zatwierdzeniem jest pobranie obrazu za pomocą
imageWithCGImage:scale:orientation
, jak w poniższej metodzie:Aby to zrealizować, napisalibyśmy:
Powinno to zapobiec rozciągnięciu obrazu we wszystkich stanach kontrolnych. U mnie zadziałało, ale daj mi znać, jeśli nie!
UWAGA: tutaj zajmujemy się problemem związanym z
UIButton
, aleinsideButton:
równie dobrze może byćinsideView:
lub cokolwiek chciałoby się dopasować do obrazu.źródło
Miałem ten problem jakiś czas temu. Problem polegał na tym, że próbowałem zastosować ten efekt do przycisku UIButton w tle, który jest ograniczony i dlatego nie można go tak łatwo dostosować.
Sztuczka polega na tym, aby ustawić go jako zwykły obraz, a następnie zastosować technikę @ ayreguitar i to powinno to naprawić!
źródło
To zadziałało dla mnie
Dziękuję @ayreguitar za komentarz
źródło
Oto szybka alternatywna odpowiedź:
źródło
Łącząc razem kilka różnych odpowiedzi w jedno rozwiązanie - utwórz przycisk o niestandardowym typie, ustaw właściwość imageView contentMode przycisku i ustaw obraz dla przycisku (nie obraz tła, który nadal będzie skalowany do wypełnienia).
źródło
źródło
Ta odpowiedź jest oparta na odpowiedzi @ WernerAltewischer .
Aby uniknąć podłączenia mojego przycisku do IBOutlet w celu wykonania na nim kodu, podklasowałem klasę UIButton:
Teraz utwórz niestandardowy przycisk w swoim xib i ustaw jego obraz (nie obraz tła):
Następnie ustaw jego klasę:
Jesteś skończony!
Zamiast tego
, dopasowanie obrazu przycisku jest teraz zgodne z oczekiwaniami:
źródło
ios 12. Musisz także dodać wyrównanie zawartości
źródło
Miałem problemy z nieproporcjonalną zmianą rozmiaru obrazu, więc sposób, w jaki go naprawiłem, polegał na użyciu wstawek krawędziowych.
źródło
Tryby zawartości UIView mają zastosowanie do odpowiedniej „zawartości” CALayera. Działa to w przypadku
UIImageView
s, ponieważ ustawiająCALayer
treść na odpowiednieCGImage
.drawRect:
ostatecznie renderuje do zawartości warstwy.Niestandardowy
UIButton
(o ile wiem) nie ma zawartości (przyciski w stylu zaokrąglonego prostokąta mogą być renderowane przy użyciu zawartości). Przycisk ma podglądy: tłoUIImageView
, obrazUIImageView
i tytułUILabel
. UstawianiecontentMode
podrzędnego może zrobić, co chcesz, ale majstrowanie przyUIButton
hierarchii widoków jest trochę niemożliwe.źródło
Zmiana
UIButton.imageView.contentMode
nie działa na mnie.Rozwiązałem problem, ustawiając obraz na właściwość „Tło”.
W razie potrzeby możesz dodać ograniczenie współczynnika
źródło
To pokrywa się z wieloma innymi odpowiedziami, ale rozwiązaniem dla mnie było
contentMode
zUIImageView
na przycisku do.ScaleAspectFit
- który może być sporządzona w „Użytkownika Runtime Atrybuty” w konstruktorze Interface (tj.self.imageView.contentMode
, liczba, 1) lub wUIButton
podklasie;źródło
Możesz użyć imageWithCGImage, jak pokazano powyżej (ale bez brakujących nawiasów).
Ponadto ... miliony telefonów innych niż 4.0 nie będą w ogóle działać z tym kodem.
źródło
[button sizeToFit]
pracował dla mnie.źródło
Podobnie jak @Guillaume, utworzyłem podklasę UIButton jako plik Swift. Następnie ustaw moją klasę niestandardową w Interface Builder:
.
A tutaj plik Swift:
źródło
Miałem ten sam problem, ale nie mogłem go uruchomić (być może jest to błąd w SDK).
Ostatecznie, jako obejście, umieściłem
UIImageView
za moim przyciskiem i ustawiłem opcje, które chciałem, a następnie po prostu umieściłem na nim pusteUIButton
miejsce.źródło