Saya melihat di inspektur bahwa saya dapat mengubah warna latar belakang, tetapi saya juga ingin mengubah warna batas dan ketebalan, apakah ini mungkin?
275
Saya melihat di inspektur bahwa saya dapat mengubah warna latar belakang, tetapi saya juga ingin mengubah warna batas dan ketebalan, apakah ini mungkin?
Jawaban:
Anda perlu menggunakan layer view untuk mengatur properti border. misalnya:
Anda juga perlu menautkan dengan QuartzCore.framework untuk mengakses fungsi ini.
sumber
__bridge CGColorRef
. Ini tidak bekerja. Itu perlu[UIColor blackColor].CGColor
seperti yang disebutkan dalam jawaban.#import <QuartzCore/QuartzCore.h>
tidak lagi dibutuhkan.Pembaruan Xcode 6
Karena versi terbaru Xcode ada solusi yang lebih baik untuk ini:
Dengan
@IBInspectable
Anda dapat mengatur Atribut langsung dari dalam yangAttributes Inspector
.Ini menentukan
User Defined Runtime Attributes
untuk Anda:Ada dua pendekatan untuk mengatur ini:
Opsi 1 (dengan pembaruan langsung di Storyboard)
MyCustomView
.UIView
.@IBDesignable
(ini membuat Lihat pembaruan hidup). *@IBInspectable
MyCustomView
`
*
@IBDesignable
Hanya berfungsi bila diset pada awalclass MyCustomView
Opsi 2 (tidak berfungsi sejak Swift 1.2, lihat komentar)
Perpanjang Kelas UIView Anda:
Dengan cara ini, Tampilan default Anda selalu memiliki bidang tambahan yang dapat diedit
Attributes Inspector
. Keuntungan lain adalah Anda tidak perlu mengubah kelasMycustomView
setiap saat. Namun, satu kelemahannya adalah Anda hanya akan melihat perubahan saat menjalankan aplikasi.sumber
Anda juga dapat membuat batas dengan warna keinginan Anda ..
* r, g, b adalah nilai antara 0 hingga 255.
sumber
r
,g
danb
mungkin seharusnya mengapung; pembagi juga harus mengapung:r / 255.0
.Tambahkan @IBInspectables berikut dalam ekstensi UIView
Dan kemudian Anda harus dapat mengatur atribut borderColor dan borderWidth langsung dari inspektur Atribut. Lihat gambar terlampir
Inspektur Atribut
sumber
Ketika saya menggunakan solusi CALayer dari Vladimir, dan di atas tampilan saya memiliki animasi, seperti modal UINavigationController yang ditolak, saya melihat banyak gangguan yang terjadi dan memiliki masalah kinerja gambar.
Jadi, cara lain untuk mencapai ini, tetapi tanpa gangguan dan kehilangan kinerja, adalah dengan membuat UIView khusus dan mengimplementasikan
drawRect
pesan seperti:sumber
setNeedsDisplay
tampilan. Ini akan memaksa redraw UIView dan secara implisit akan menelepon kembalidrawRect
. Tidak diuji, tho ...sumber
Coba kode ini:
sumber
Saya tidak akan menyarankan mengganti drawRect karena menyebabkan hit kinerja.
Sebagai gantinya, saya akan memodifikasi properti kelas seperti di bawah ini (di uiview khusus Anda):
Saya tidak melihat gangguan ketika mengambil pendekatan di atas - tidak yakin mengapa menempatkan initWithFrame menghentikan ini ;-)
sumber
Saya ingin menambahkan ini ke jawaban @ marczking ( Opsi 1 ) sebagai komentar, tetapi status rendah saya di StackOverflow mencegahnya.
Saya melakukan port jawaban @ marczking untuk Objective C. Bekerja seperti pesona, terima kasih @marczking!
UIView + Border.h:
UIView + Border.m:
sumber
@IBInspectable bekerja untuk saya di iOS 9, Swift 2.0
sumber
Jika Anda tidak ingin mengedit lapisan UIView, Anda selalu dapat menyematkan tampilan dalam tampilan lain. Tampilan induk akan mengatur warna latar belakang ke warna batas. Ini juga akan sedikit lebih besar, tergantung pada seberapa lebar Anda ingin menjadi perbatasan.
Tentu saja, ini hanya berfungsi jika tampilan Anda tidak transparan dan Anda hanya ingin warna garis tunggal. OP ingin perbatasan dalam pandangan itu sendiri, tetapi ini mungkin merupakan alternatif yang layak.
sumber
Jika Anda ingin menambahkan batas yang berbeda di sisi yang berbeda, mungkin menambahkan subview dengan gaya spesifik adalah cara yang mudah dibuat.
sumber
warna batas item dalam cepat 4.2:
sumber