Saya memiliki UIButton
teks dengan teks "Jelajahi aplikasi" dan UIImage
(>) Di Interface Builder
dalamnya terlihat seperti:
[ (>) Explore the app ]
Tapi saya perlu menempatkan ini UIImage
SETELAH teks:
[ Explore the app (>) ]
Bagaimana cara memindahkan UIImage
ke kanan?
ios
iphone
cocoa-touch
uibutton
imageedgeinsets
Pavel Yakimenko
sumber
sumber
Jawaban:
Solusi saya untuk ini cukup sederhana
sumber
Pada iOS 9 dan seterusnya, tampaknya cara sederhana untuk mencapai ini adalah dengan memaksa tampilan semantik.
Atau secara terprogram, menggunakan:
sumber
semanticContentAttribute
dalam logika tata letak kita, daripada mengubahsemanticContentAttribute
dirinya sendiri. (mengubah pendekatan semantik, tidak akan bekerja dengan baik dengan internasionalisasi)Atur
imageEdgeInset
dantitleEdgeInset
untuk memindahkan komponen di dalam gambar Anda. Anda juga dapat membuat tombol menggunakan grafik yang berukuran penuh, dan menggunakannya sebagai gambar latar belakang tombol (kemudian digunakantitleEdgeInsets
untuk memindahkan judul).sumber
Jawaban Raymond W adalah yang terbaik di sini. Subclass UIButton dengan custom layoutSubviews. Sangat mudah dilakukan, berikut adalah implementasi layoutSubviews yang berhasil untuk saya:
sumber
Bagaimana dengan subclassing
UIButton
dan overridinglayoutSubviews
?Kemudian pasca-pemrosesan lokasi
self.imageView
&self.titleLabel
sumber
Cara sederhana lainnya (yang BUKAN hanya untuk iOS 9) adalah dengan subclass UIButton untuk mengganti kedua metode ini
contentEdgeInsets
sudah diperhitungkan dengan menggunakan super.sumber
Memaksakan 'kanan-ke-kiri' untuk tombol bukanlah suatu opsi jika aplikasi Anda mendukung 'kiri-ke-kanan' dan 'kanan-ke-kiri'.
Solusi yang berhasil untuk saya adalah subclass yang dapat ditambahkan ke tombol di Storyboard dan berfungsi dengan baik dengan kendala (diuji di iOS 11):
Di mana 'padding' adalah ruang antara judul dan gambar.
sumber
.forceRightToLeft
ada pilihan! Cukup gunakan nilai kebalikan (.forceLeftToRight
) jikaUIApplication.shared.userInterfaceLayoutDirection == .rightToLeft
.Di Swift:
sumber
Membangun jawaban oleh @split ...
Jawabannya luar biasa, tetapi mengabaikan fakta bahwa tombol tersebut mungkin memiliki gambar kustom dan sisipan tepi judul yang disetel sebelumnya (misalnya di storyboard).
Misalnya, Anda mungkin ingin gambar memiliki bantalan dari atas dan bawah wadah, tetapi tetap memindahkan gambar ke sisi kanan tombol.
Saya memperluas konsep dengan metode ini: -
sumber
Ini membuat tombol rata kanan, seperti:
Tombol tidak menyesuaikan lebarnya sesuai dengan konteksnya, sehingga akan muncul spasi di sebelah kiri label. Anda dapat menyelesaikan ini dengan menghitung lebar bingkai tombol dari buttonLabelSize.width dan buttonImageSize.width.
sumber
sumber
Solusi ini berfungsi iOS 7 ke atas
Hanya subclass UIButton
Penggunaan (Di suatu tempat di kelas Anda):
sumber
Membangun dari jawaban sebelumnya. Jika Anda ingin memiliki margin antara ikon dan judul tombol, kode harus sedikit berubah untuk mencegah mengambang label dan ikon di atas batas tombol berukuran intrinsik.
Baris kode terakhir penting untuk penghitungan ukuran konten secara intrinsik untuk tata letak otomatis.
sumber
Inilah cara saya sendiri untuk melakukan hal itu, (setelah sekitar 10 tahun)
sumber
Solusi satu baris di Swift:
sumber