Saya mencoba membuat tombol yang memiliki beberapa teks di bawah ikon (agak seperti tombol aplikasi) namun tampaknya cukup sulit untuk dicapai. Ada ide bagaimana saya bisa mendapatkan teks untuk ditampilkan di bawah gambar dengan UIButton
?
158
https://github.com/albert-zhang/AZCenterLabelButton
( Tautan )Jawaban:
Atau Anda bisa menggunakan kategori ini:
ObjC
Ekstensi cepat
Saran: Jika tinggi tombol kurang dari
totalHeight
, maka gambar akan menarik batas luar.imageEdgeInset.top
seharusnya:sumber
CGRectGetHeight()
danCGRectGetWidth()
ketika mendapatkan imageView dan titleLabel tinggi dan lebar.CGFloat inset = (self.frame.size.height - totalHeight)/2; self.contentEdgeInsets = UIEdgeInsetsMake(inset, 0.0f, inset, 0.0f);
Dalam Xcode, Anda cukup mengatur Edge Title Left Inset menjadi negatif lebar gambar. Ini akan menampilkan label di tengah gambar.
Untuk membuat label ditampilkan di bawah gambar (agak seperti tombol aplikasi), Anda mungkin perlu mengatur Inset Judul Ujung Tepi ke beberapa angka positif.
sumber
Ini adalah tombol judul terpusat sederhana yang diterapkan di Swift dengan mengesampingkan
titleRect(forContentRect:)
danimageRect(forContentRect:)
. Ini juga mengimplementasikanintrinsicContentSize
untuk digunakan dengan AutoLayout.sumber
Lihatlah jawaban yang bagus ini di Swift.
sumber
left
diimageEdgeInsets
dengan(self.frame.size.width - imageSize.width) / 2
layoutSubviews()
Anda.Subkelas
UIButton
. Override -layoutSubviews
untuk memindahkan built-insubviews
ke posisi baru:sumber
titleRectForContentRect
danimageRectForContentRect
Jawaban icecrystal23 yang di-refactored.
Swift 3, bekerja dengan pembayaran otomatis, xib, storyboard, dapat dianimasikan.
Tombol dalam jawaban asli icecrystal23 `s memiliki bingkai yang dihitung dengan buruk. Saya pikir saya sudah memperbaikinya.
Sunting: Diperbarui ke Swift 5 dan membuat pekerjaan di dalam Interface Builder / Storyboards
sumber
mengoreksi salah satu jawaban di sini:
Swift 3:
sumber
Ini adalah versi modifikasi dari jawaban luar biasa Erik W. Tetapi alih-alih menempatkan gambar yang berpusat di TOP tampilan, itu menempatkan gambar dan label yang berpusat di tampilan sebagai grup.
Perbedaannya adalah:
vs.
Sumber di bawah ini:
FYI: Ini bisa pecah ketika dikombinasikan dengan animasi UIView, karena layoutSubviews dipanggil selama mereka.
sumber
Solusi Dave di Swift:
sumber
Jika Anda subkelas
UIButton
danoverride layoutSubviews
, Anda dapat menggunakan di bawah ini untuk memusatkan gambar dan menempatkan judul yang berpusat di bawahnya:kTextTopPadding
adalah konstanta yang harus Anda perkenalkan yang menentukan jarak antara gambar dan teks di bawahnya.sumber
Diperbarui jawaban Kenny Winker karena sizeWithFont sudah tidak digunakan lagi di iOS 7.
sumber
Di iOS 11 / Swift 4 tidak ada jawaban di atas yang benar-benar berfungsi untuk saya. Saya menemukan beberapa contoh dan memutarkannya:
Semoga ini bisa membantu seseorang.
sumber
Menggunakan kode Kenny Winker dan simeon saya membuat kode cepat ini yang berfungsi untuk saya.
sumber
Anda hanya perlu menyesuaikan ketiga inset tepi berdasarkan ukuran gambar dan label judul Anda:
Anda bisa mendapatkan batasan label judul dengan memanggil sizeToFit setelah mengatur teksnya. Spasi horizontal harus bekerja terlepas dari ukuran teks, font dan gambar, tetapi saya tidak tahu satu solusi untuk mendapatkan spasi vertikal dan inset tepi bawah konsisten.
sumber
Inilah jawaban "Bear With Me" sebagai subclass di
Swift 2.0
. Untuk menggunakannya cukup ubah kelas tombol AndaInterface Builder
keVerticalButton
dan itu akan secara ajaib memperbarui pratinjau.Saya juga memperbaruinya untuk menghitung ukuran konten intrinsik yang benar untuk pembayaran otomatis.
sumber
layoutSubviews()
dipanggil berulang kali dalam kasus saya:intrinsicContentSize
aksesimageView
yang membuatlayoutSubviews
dipanggil yang mengaksesimageView
dll.@Tiago Saya mengubah jawaban Anda seperti ini. Ini berfungsi dengan baik dengan semua ukuran
sumber
Saya mengambil kombinasi jawaban di sini dan muncul dengan jawaban yang sepertinya cocok untuk saya, di Swift. Saya tidak suka bagaimana saya hanya mengesampingkan insets, tetapi berhasil. Saya akan terbuka untuk perbaikan yang disarankan dalam komentar. Tampaknya berfungsi dengan baik dengan
sizeToFit()
dan dengan tata letak otomatis.sumber
Gunakan dua metode ini:
Contoh:
Dan Anda dapat menggunakan:
sumber
Metode Swift 5 - di bawah ini berfungsi untuk saya
Pastikan judul tombol Anda tidak terpotong di storyboard / xib lain pergi untuk
Solusi 2
sumber
Saya pikir salah satu cara terbaik untuk melakukannya adalah dengan mengelompokkan UIButton dan mengganti beberapa metode rendering:
sumber
Saya menemukan bahwa jawaban Simeon mungkin yang terbaik tetapi memberi saya hasil yang aneh pada beberapa tombol dan saya tidak tahu mengapa. Jadi dengan menggunakan jawabannya sebagai basis saya menerapkan tombol saya seperti di bawah ini:
sumber
Inilah subkelas saya
UIButton
yang memecahkan masalah ini:Itu dia. Bekerja seperti pesona. Masalah dapat muncul jika tombol akan menjadi kecil agar sesuai dengan judul dan teks.
sumber
@ simeon ini solusi di Objective-C
sumber
CGSizeMake(MAX(labelSize.width, image.size.width), image.size.height + labelSize.height + 5.0)
kalau-kalauJika Anda menggunakan font khusus , perhitungan untuk ukuran titleLabel tidak akan berfungsi dengan baik, Anda harus menggantinya dengan
let titleLabelSize = self.titleLabel?.text?.size(withAttributes: [NSAttributedStringKey.font: self.titleLabel!.font!])
sumber
Alih-alih melalui neraka mencoba untuk memposisikan ikon dan teks dengan insets tepi, Anda bisa membuat NSAttributedString dengan gambar Anda sebagai lampiran dan mengaturnya ke judul yang dikaitkan tombol Anda sebagai gantinya:
sumber
UIButton
Layout bidang teks A untuk hanya menampilkan 1 baris, oleh karena itu tidak berfungsi bahkan ketika menggunakan garis putus-putus dalam string yang dikaitkan. Akan menjadi solusi yang bagus jika tidak.button.titleLabel?.numberOfLines
agar mendapatkan jumlah garis yang diperlukanSolusi Ramah Lokalisasi:
Begitu banyak solusi hebat, tetapi saya ingin menambahkan catatan di sini untuk mereka yang menggunakan lokalisasi.
Anda perlu membalikkan nilai EdgeInstets kiri dan kanan untuk mendapatkan tombol yang ditata dengan benar jika terjadi perubahan arah bahasa dari LtR ke RtL.
Menggunakan solusi serupa saya akan menerapkannya sebagai berikut:
sumber
Tombol gambar atas dan judul bawah dengan subkelas UIButton
sumber
Itu jelas merupakan kerja keras untuk pertanyaan ini, namun ... Dalam salah satu proyek saya, saya pertama kali harus menerapkan tombol dengan ikon selaras paling kiri. Lalu kami mendapat tombol lain dengan judul di bawah gambar. Saya mencari solusi yang sudah ada tetapi tidak berhasil. Jadi, ini dia tombol alignable:
Semoga bermanfaat.
sumber
Sesuatu seperti ini di dalam
UIButton
subkelassumber
Cukup sederhana.
Alih-alih ini:
Gunakan ini:
Kemudian Anda dapat menambahkan teks pada tombol dengan mudah menggunakan:
// button.titleLabel! .font = UIFont (nama: "FontName", ukuran: 30)
sumber