Saya punya beberapa UIButtons, dan di IB mereka disetel ke Aspect Fit, tapi untuk beberapa alasan mereka selalu meregang. Apakah ada hal lain yang harus Anda atur? Saya mencoba semua mode tampilan yang berbeda dan tidak ada yang berfungsi, semuanya meregang.
ios
iphone
uibutton
aspect-fit
marty
sumber
sumber
Jawaban:
Saya pernah mengalami masalah itu sebelumnya. Saya menyelesaikannya dengan meletakkan gambar saya di
UIImageView
, di manacontentMode
pengaturan benar-benar berfungsi, dan meletakkan kustom transparanUIButton
di atasnya.EDIT: Jawaban ini sudah usang. Lihat jawaban @Werner Altewischer untuk jawaban yang benar di iOS versi modern.
sumber
Solusinya adalah untuk mengatur
contentMode
padaimageView
milikUIButton
. TheUIButton
harus dibuat dengan jenis kustom untuk bekerja saya percaya (jika tidaknil
dikembalikan untuk properti ini).sumber
[button.imageView setContentMode:UIViewContentModeScaleAspectFit];
button.imageView!.contentMode = UIViewContentMode.scaleAspectFit
Metode ini berhasil untuk saya dengan sangat baik .:
Di Xib pilih tombol dan atur
user defined runtime attributes
:self.imageView.contentMode
Number
1
sumber
extension UIButton { @IBInspectable var imageContentMode: Int { get {return imageView?.contentMode.rawValue ?? 0} set {imageView?.contentMode = UIViewContentMode(rawValue: newValue) ?? .scaleAspectFit} } }
imageView.contentMode
berhasil untuk saya!Jika Anda melakukan ini di Interface Builder, Anda dapat menggunakan inspektur atribut Runtime untuk menyetelnya secara langsung tanpa kode apa pun.
Setel Jalur Kunci Anda pada tombol menjadi "imageView.contentMode" dengan jenis "Angka" dan nilai "1" (atau mode mana pun yang Anda inginkan).
sumber
Gunakan imageView tombol untuk contentMode. Tidak langsung pada tombol itu sendiri.
sumber
Jika Anda meletakkan gambar di
UIImageView
belakang tombol, Anda akan kehilangan fungsionalitas built-in dariUIButton
kelas, sepertiadjustsImageWhenHighlighted
danadjustsImageWhenDisabled
, dan tentu saja kemampuan untuk mengatur gambar yang berbeda untuk keadaan yang berbeda (tanpa repot melakukan ini sendiri).Jika kita ingin gambar tidak terikat untuk semua status kontrol , salah satu pendekatannya adalah menggunakan gambar
imageWithCGImage:scale:orientation
, seperti dalam metode berikut:Untuk menerapkan ini kami akan menulis:
Ini akan mencegah gambar meregang di semua status kontrol. Ini berhasil untuk saya, tetapi beri tahu saya jika tidak!
CATATAN: Di sini kami menangani masalah yang berkaitan dengan
UIButton
, tetapiinsideButton:
mungkin jugainsideView:
, atau apa pun yang ingin disesuaikan dengan gambar.sumber
Saya mengalami masalah ini beberapa waktu lalu. Masalah yang saya alami adalah saya mencoba menerapkan efek ini ke latar belakang UIButton yang terbatas dan karena itu berarti Anda tidak dapat menyesuaikannya semudah itu.
Triknya adalah mengaturnya hanya sebagai gambar kemudian menerapkan teknik @ ayreguitar dan itu harus memperbaikinya!
sumber
Ini berhasil untuk saya
Terima kasih kepada @ayreguitar atas komentarnya
sumber
Berikut jawaban alternatif dengan cepat:
sumber
Menggabungkan beberapa jawaban berbeda menjadi satu solusi-- buat tombol dengan tipe kustom, setel properti imageView contentMode tombol, dan setel gambar untuk tombol (bukan gambar latar belakang, yang masih akan diskalakan untuk diisi).
sumber
sumber
Jawaban ini berdasarkan jawaban @ WernerAltewischer .
Untuk menghindari menghubungkan tombol saya ke IBOutlet untuk mengeksekusi kode di atasnya, saya membuat subclass kelas UIButton:
Sekarang buat tombol khusus di xib Anda, dan atur gambarnya (bukan gambar latar belakang):
Kemudian, setel kelasnya:
Kamu sudah selesai!
Alih-alih
kesesuaian aspek gambar tombol Anda sekarang seperti yang diharapkan:
sumber
ios 12. Anda perlu menambahkan juga Alignment konten
sumber
Saya memiliki masalah dengan gambar yang tidak mengubah ukuran secara proporsional sehingga cara saya memperbaikinya menggunakan sisipan tepi.
sumber
Mode konten UIView berlaku untuk "konten" CALayer yang sesuai. Ini berfungsi untuk
UIImageView
s karena mereka mengaturCALayer
konten ke yang sesuaiCGImage
.drawRect:
akhirnya merender ke konten lapisan.Sebuah custom
UIButton
(sejauh yang saya tahu) tidak memiliki konten (tombol gaya rounded-rect mungkin dirender menggunakan konten). Tombol tersebut memiliki subview: latar belakangUIImageView
, gambarUIImageView
, dan judulUILabel
. MengaturcontentMode
pada subview dapat melakukan apa yang Anda inginkan, tetapi mengotak-atikUIButton
hierarki tampilan agak tidak-tidak.sumber
Perubahan
UIButton.imageView.contentMode
tidak berhasil untuk saya.Saya memecahkan masalah dengan mengatur gambar ke properti 'Background'.
Anda dapat menambahkan batasan rasio jika perlu
sumber
Ini tumpang tindih dengan banyak jawaban lainnya, tetapi solusi bagi saya adalah melakukannya
contentMode
dariUIImageView
untuk tombol untuk.ScaleAspectFit
- yang baik dapat dilakukan dalam “Ditetapkan Pengguna Runtime Atribut” di Interface Builder (yaitu.self.imageView.contentMode
, Nomor, 1) atau dalamUIButton
subclass;sumber
Anda dapat menggunakan imageWithCGImage seperti yang ditunjukkan di atas (tetapi tanpa tanda kurung yang hilang).
Juga ... jutaan ponsel non-4.0 tidak akan berfungsi dengan kode itu sama sekali.
sumber
[button sizeToFit]
bekerja untuk saya.sumber
Mirip dengan @Guillaume, saya telah membuat subclass UIButton sebagai Swift-File. Kemudian setel kelas kustom saya di Interface Builder:
.
Dan di sini file Swiftnya:
sumber
Saya memiliki masalah yang sama, tetapi saya tidak bisa membuatnya berfungsi (mungkin itu bug dengan SDK).
Akhirnya, sebagai solusinya, saya meletakkan di
UIImageView
belakang tombol saya dan mengatur opsi yang saya inginkan, lalu hanya menempatkan kosongUIButton
di atasnya.sumber