Saya melihat jawaban yang sangat rumit, semuanya menggunakan kode. Namun, jika Anda menggunakan Interface Builder , ada cara yang sangat mudah untuk melakukan ini:
Pilih tombol dan atur judul dan gambar. Perhatikan bahwa jika Anda mengatur latar belakang daripada gambar maka gambar akan diubah ukurannya jika lebih kecil dari tombol.
Atur posisi kedua item dengan mengubah tepi dan inset. Anda bahkan dapat mengontrol perataan keduanya di bagian Kontrol.
Anda bahkan dapat menggunakan pendekatan yang sama dengan kode, tanpa membuat UILabel dan UIImages di dalamnya sebagai solusi lain yang diusulkan. Selalu Tetap Sederhana!
EDIT: Terlampir contoh kecil memiliki 3 hal yang ditetapkan (judul, gambar dan latar belakang) dengan inset yang benar
Ini benar. Anda akan ingin menggunakan insets tepi pada judul dan gambar untuk menyelaraskan keduanya dengan benar. Anda dapat melakukan ini dalam kode dengan mengatur properti titleEdgeInsets dan contentEdgeInsets.
Tim Mahoney
4
ya, hampir benar. hanya Anda harus mengatur Backgroundgambar daripada Image, jika tidak, Anda tidak akan melihat judul bahkan tidak mengatur nilai inset untuk memposisikan ulang judul.
holex
6
Saya punya masalah dengan ini juga. Jika judul Anda tidak muncul, coba atur offset kiri negatif untuknya. Sepertinya IB secara otomatis mendorongnya ke kanan gambar.
brians
8
Ini hanya menampilkan gambar dan teks berdampingan, bukan? Apakah ada cara untuk mengubah orientasi dari atas ke bawah? Inilah yang dinyatakan oleh pertanyaan awal dan apa yang saya cari. Terima kasih!
flohei
12
Bagi mereka yang menggunakan Xcode 8, Anda mungkin tidak melihat properti Edge. Teks mungkin hilang setelah menambahkan gambar juga. Ini mengubah teks menjadi putih dan jika Anda berada di latar belakang putih, sepertinya menghilang. Ubah warna teks dan itu akan muncul dekat dengan gambar. Anda dapat menyesuaikan insets di bawah Inspektur ukuran.
Micah Montoya
67
Saya pikir Anda mencari solusi ini untuk masalah Anda:
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
... sisa penyesuaian tombol adalah tugas Anda sekarang, dan jangan lupa untuk menambahkan tombol ke tampilan Anda.
UPDATE # 1 dan UPDATE # 2
atau, jika Anda tidak memerlukan tombol dinamis Anda bisa menambahkan tombol Anda ke tampilan Anda di Interface Builder dan Anda bisa mengatur nilai yang sama di sana juga. itu cukup sama, tetapi di sini adalah versi ini juga dalam satu gambar sederhana.
Anda juga dapat melihat hasil akhir di Interface Builder seperti pada screenshot.
EdgeInsets hanya berfungsi ketika Anda memiliki "set gambar tombol" dan ketika Anda mengatur gambar tombol Anda tidak dapat melihat judul. Dan jika Anda mengatur gambar latar belakang maka EdgeInsets tidak dapat diterapkan ke gambar. dan Anda bisa melihat judulnya. Jadi, Anda tidak dapat mengatur edgeinsect ke keduanya secara bersamaan.
Badal Shah
@BadalShah, ya, ada beberapa skenario (tergantung pada ukuran tombol, ukuran gambar, panjang judul, dll ...) ketika apa yang Anda katakan itu benar dan Anda tidak dapat melihat judul dan gambar pada saat yang sama karena gambar mendorong keluar judul area yang terlihat; tetapi skenario itu sama sekali bukan generik, situasi generiknya adalah bahwa judul dan gambar dapat dan akan muncul pada saat yang bersamaan.
holex
32
Xcode-9 dan Xcode-10 Apple telah melakukan beberapa perubahan terkait Edge Inset sekarang, Anda dapat mengubahnya di bawah size-inspector.
Ikuti langkah-langkah di bawah ini:
Langkah-1:
Masukkan teks dan pilih gambar yang ingin Anda tampilkan:
Langkah-2:
Pilih kontrol tombol sesuai kebutuhan Anda seperti yang ditunjukkan pada gambar di bawah ini:
Langkah-3:
Sekarang pergi ke inspektur ukuran dan tambahkan nilai sesuai kebutuhan Anda:
Saya perlu memposisikan gambar di atas & teks di bawah gambar keduanya harus dapat diklik ..
Codesen
4
Gunakan kode ini:
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];
Saya pikir jawaban Angel García Olloqui adalah solusi lain yang baik, jika Anda menempatkan semuanya secara manual dengan pembangun antarmuka tetapi saya akan menyimpan solusi saya karena saya tidak perlu memodifikasi inset konten untuk setiap tombol saya.
Jawaban:
Saya melihat jawaban yang sangat rumit, semuanya menggunakan kode. Namun, jika Anda menggunakan Interface Builder , ada cara yang sangat mudah untuk melakukan ini:
Anda bahkan dapat menggunakan pendekatan yang sama dengan kode, tanpa membuat UILabel dan UIImages di dalamnya sebagai solusi lain yang diusulkan. Selalu Tetap Sederhana!
EDIT: Terlampir contoh kecil memiliki 3 hal yang ditetapkan (judul, gambar dan latar belakang) dengan inset yang benar
sumber
Background
gambar daripadaImage
, jika tidak, Anda tidak akan melihat judul bahkan tidak mengatur nilai inset untuk memposisikan ulang judul.Saya pikir Anda mencari solusi ini untuk masalah Anda:
... sisa penyesuaian tombol adalah tugas Anda sekarang, dan jangan lupa untuk menambahkan tombol ke tampilan Anda.
UPDATE # 1 dan UPDATE # 2
atau, jika Anda tidak memerlukan tombol dinamis Anda bisa menambahkan tombol Anda ke tampilan Anda di Interface Builder dan Anda bisa mengatur nilai yang sama di sana juga. itu cukup sama, tetapi di sini adalah versi ini juga dalam satu gambar sederhana.
Anda juga dapat melihat hasil akhir di Interface Builder seperti pada screenshot.
sumber
Xcode-9 dan Xcode-10 Apple telah melakukan beberapa perubahan terkait Edge Inset sekarang, Anda dapat mengubahnya di bawah size-inspector.
Ikuti langkah-langkah di bawah ini:
Langkah-1: Masukkan teks dan pilih gambar yang ingin Anda tampilkan:
Langkah-2: Pilih kontrol tombol sesuai kebutuhan Anda seperti yang ditunjukkan pada gambar di bawah ini:
Langkah-3: Sekarang pergi ke inspektur ukuran dan tambahkan nilai sesuai kebutuhan Anda:
sumber
tetapi kode berikut akan menampilkan label di atas dan gambar di latar belakang
Tidak perlu menggunakan label dan tombol dalam kontrol yang sama karena UIButton memiliki properti UILabel dan UIimageview.
sumber
Gunakan kode ini:
sumber
Gunakan kode ini:
sumber
Saya mengalami masalah yang sama, dan saya memperbaikinya dengan membuat subclass baru
UIButton
dan menimpalayoutSubviews:
metode seperti di bawah ini:Saya pikir jawaban Angel García Olloqui adalah solusi lain yang baik, jika Anda menempatkan semuanya secara manual dengan pembangun antarmuka tetapi saya akan menyimpan solusi saya karena saya tidak perlu memodifikasi inset konten untuk setiap tombol saya.
sumber
Buat
UIImageView
danUILabel
, dan atur gambar dan teks untuk kedua hal ini .... lalu Tempatkan tombol khusus di atas imageView dan Label ....sumber
Anda harus membuat tampilan gambar khusus untuk gambar dan label khusus untuk teks dan Anda menambahkan ke tombol Anda sebagai subview. Itu dia.
Untuk tujuan pengujian, gunakan
yourButtonSelected:
metodeSaya pikir ini akan sangat membantu Anda.
sumber
Ini sangat sederhana, cukup tambahkan gambar ke latar belakang tombol Anda dan beri teks ke label tombol untuk uicontrolstatenormal. Itu dia.
sumber
versi cepat:
sumber