Widzę bardzo skomplikowane odpowiedzi, wszystkie przy użyciu kodu. Jeśli jednak używasz Interface Builder , możesz to zrobić w bardzo prosty sposób:
Wybierz przycisk i ustaw tytuł oraz obraz. Zwróć uwagę, że jeśli ustawisz tło zamiast obrazu, rozmiar obrazu zostanie zmieniony, jeśli jest mniejszy niż przycisk.
Ustaw położenie obu elementów, zmieniając krawędź i wstawki. Możesz nawet kontrolować wyrównanie obu w sekcji Sterowanie.
Możesz nawet użyć tego samego podejścia w kodzie, bez tworzenia w nim UILabels i UIImages, jak w przypadku innych proponowanych rozwiązań. Zawsze zachowuj prostotę!
EDYCJA: Załączam mały przykład z ustawionymi 3 rzeczami (tytuł, obraz i tło) z poprawnymi wstawkami
To jest poprawne. Będziesz chciał użyć wstawek krawędzi w tytule i obrazie, aby prawidłowo je wyrównać. Możesz to zrobić w kodzie, ustawiając właściwości titleEdgeInsets i contentEdgeInsets.
Tim Mahoney
4
tak, jest prawie poprawne. po prostu musisz ustawić Backgroundobraz zamiast znaku Image, w przeciwnym razie nie zobaczysz tytułu, nawet nie ustawisz wartości wstawienia, aby zmienić położenie tytułu.
holex
6
Ja też miałem z tym problem. Jeśli tytuł się nie wyświetla, spróbuj ustawić dla niego ujemne lewe przesunięcie. Wygląda na to, że IB automatycznie przesuwa go na prawą stronę obrazu.
brians,
8
To wyświetla tylko obraz i tekst obok siebie, prawda? Czy istnieje sposób na zmianę orientacji z góry na dół? To jest to, co stwierdza pierwotne pytanie i czego również szukam. Dzięki!
flohei,
12
W przypadku osób używających Xcode 8 może nie być widoczna właściwość Edge. Tekst może również zniknąć po dodaniu obrazu. Zmienia tekst na biały, a jeśli jesteś na białym tle, wygląda na to, że zniknął. Zmień kolor tekstu, a pojawi się on blisko obrazu. Możesz dostosować wstawki w Inspektorze rozmiaru.
Micah Montoya
67
Myślę, że szukasz tego rozwiązania swojego problemu:
UIButton*_button =[UIButton buttonWithType:UIButtonTypeCustom];[_button setFrame:CGRectMake(0.f,0.f,128.f,128.f)];// SET the values for your wishes[_button setCenter:CGPointMake(128.f,128.f)];// SET the values for your wishes[_button setClipsToBounds:false];[_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal];// SET the image name for your wishes[_button setTitle:@"Button" forState:UIControlStateNormal];[_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]];[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];// SET the colour for your wishes[_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];// SET the colour for your wishes[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f,0.f,-110.f,0.f)];// SET the values for your wishes[_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];// you can ADD the action to the button as well like
... reszta dostosowania przycisku jest teraz Twoim obowiązkiem i nie zapomnij dodać przycisku do widoku.
UPDATE # 1 i UPDATE # 2
lub, jeśli nie potrzebujesz dynamicznego przycisku, możesz dodać przycisk do swojego widoku w programie Interface Builder i ustawić te same wartości również w tym miejscu. to jest całkiem to samo, ale tutaj jest również ta wersja na jednym prostym obrazku.
możesz również zobaczyć ostateczny wynik w Interface Builder, tak jak jest na zrzucie ekranu.
EdgeInsets działa tylko wtedy, gdy masz „ustaw obraz przycisku” i kiedy ustawisz obraz przycisku, nie możesz zobaczyć tytułu. A jeśli ustawisz obraz tła, EdgeInsets nie może zastosować do obrazu. i możesz zobaczyć tytuł. Nie możesz więc ustawić edgeinsect na oba jednocześnie.
Badal Shah,
@BadalShah, tak, są pewne scenariusze (w zależności od rozmiaru przycisku, rozmiaru obrazu, długości tytułu itp.), Kiedy to, co powiedziałeś, jest prawdą i nie możesz zobaczyć tytułu i obrazu w tym samym czasie, ponieważ obraz wypycha tytuł widocznego obszaru; ale ten scenariusz wcale nie jest ogólny, ogólna sytuacja jest taka, że zarówno tytuł, jak i obraz mogą i będą pojawiać się w tym samym czasie.
holex
32
Xcode-9 i Xcode-10 Apple dokonały teraz kilku zmian dotyczących Edge Inset, możesz to zmienić w inspektorze rozmiaru.
Wykonaj poniższe kroki:
Krok 1:
Wprowadź tekst i wybierz obraz, który chcesz pokazać:
Krok 2:
Wybierz sterowanie przyciskiem zgodnie z wymaganiami, jak pokazano na poniższym obrazku:
Step-3:
Teraz przejdź do inspektora rozmiaru i dodaj wartość zgodnie z wymaganiami:
Muszę ustawić obraz na górze, a tekst pod obrazem oba powinny być klikalne ..
Codesen
4
Użyj tego kodu:
UIButton*button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.imageView.frame=CGRectMake(0.0f,0.0f,50.0f,44.0f);///You can replace it with your own dimensions.UILabel*label=[[UILabel alloc] initWithFrame:CGRectMake(0.0f,35.0f,50.0f,44.0f)];///You can replace it with your own dimensions.[button addSubview:label];
Myślę, że odpowiedź Angel García Olloqui jest kolejnym dobrym rozwiązaniem, jeśli umieścisz je ręcznie za pomocą narzędzia do tworzenia interfejsu, ale zachowam swoje rozwiązanie, ponieważ nie muszę modyfikować wstawek zawartości dla każdego przycisku.
Odpowiedzi:
Widzę bardzo skomplikowane odpowiedzi, wszystkie przy użyciu kodu. Jeśli jednak używasz Interface Builder , możesz to zrobić w bardzo prosty sposób:
Możesz nawet użyć tego samego podejścia w kodzie, bez tworzenia w nim UILabels i UIImages, jak w przypadku innych proponowanych rozwiązań. Zawsze zachowuj prostotę!
EDYCJA: Załączam mały przykład z ustawionymi 3 rzeczami (tytuł, obraz i tło) z poprawnymi wstawkami
źródło
Background
obraz zamiast znakuImage
, w przeciwnym razie nie zobaczysz tytułu, nawet nie ustawisz wartości wstawienia, aby zmienić położenie tytułu.Myślę, że szukasz tego rozwiązania swojego problemu:
... reszta dostosowania przycisku jest teraz Twoim obowiązkiem i nie zapomnij dodać przycisku do widoku.
UPDATE # 1 i UPDATE # 2
lub, jeśli nie potrzebujesz dynamicznego przycisku, możesz dodać przycisk do swojego widoku w programie Interface Builder i ustawić te same wartości również w tym miejscu. to jest całkiem to samo, ale tutaj jest również ta wersja na jednym prostym obrazku.
możesz również zobaczyć ostateczny wynik w Interface Builder, tak jak jest na zrzucie ekranu.
źródło
Xcode-9 i Xcode-10 Apple dokonały teraz kilku zmian dotyczących Edge Inset, możesz to zmienić w inspektorze rozmiaru.
Wykonaj poniższe kroki:
Krok 1: Wprowadź tekst i wybierz obraz, który chcesz pokazać:
Krok 2: Wybierz sterowanie przyciskiem zgodnie z wymaganiami, jak pokazano na poniższym obrazku:
Step-3: Teraz przejdź do inspektora rozmiaru i dodaj wartość zgodnie z wymaganiami:
źródło
ale poniższy kod pokaże etykietę powyżej i obraz w tle
Nie ma potrzeby używania etykiety i przycisku w tej samej kontrolce, ponieważ UIButton ma właściwości UILabel i UIimageview.
źródło
Użyj tego kodu:
źródło
Użyj tego kodu:
źródło
Napotkałem ten sam problem i naprawiam go, tworząc nową podklasę
UIButton
i zastępująclayoutSubviews:
metodę, jak poniżej:Myślę, że odpowiedź Angel García Olloqui jest kolejnym dobrym rozwiązaniem, jeśli umieścisz je ręcznie za pomocą narzędzia do tworzenia interfejsu, ale zachowam swoje rozwiązanie, ponieważ nie muszę modyfikować wstawek zawartości dla każdego przycisku.
źródło
Utwórz
UIImageView
iUILabel
, ustaw obraz i tekst na oba te elementy .... a następnie umieść niestandardowy przycisk nad imageView i etykietą ....źródło
Powinieneś utworzyć niestandardowy widok obrazu dla obrazu i własną etykietę dla tekstu i dodać do przycisku jako podglądy. Otóż to.
Do celów testowych użyj
yourButtonSelected:
metodyMyślę, że to ci pomoże.
źródło
To naprawdę proste, po prostu dodaj obraz do tła swojego przycisku i nadaj tekstowi tytuł etykiety przycisku, aby uicontrolstatenormal. Otóż to.
źródło
szybka wersja:
źródło