Bagaimana cara mengatur warna batas kustom UIView secara terprogram?

99

Saya mencoba mengatur warna perbatasan khusus UIView secara terprogram di Swift.

Shashi Verma
sumber
3
Tunjukkan kode yang relevan dalam pertanyaan Anda. Jelaskan masalah apa yang Anda alami.
rmaddy
1
kemungkinan duplikat Cocoa Touch: Bagaimana Cara Mengubah Warna dan Ketebalan Border UIView? Anda hanya perlu menggunakannya dengan cara yang cepat
Inder Kumar Rathore

Jawaban:

202

Jika Anda Menggunakan Swift 2.0+

self.yourView.layer.borderWidth = 1
self.yourView.layer.borderColor = UIColor(red:222/255, green:225/255, blue:227/255, alpha: 1).cgColor
Shashi Verma
sumber
Catatan: ini sepertinya tidak berhasil untuk saya (mungkin karena saya menggunakan swift 3.1?). Versi Paras Joshi ( stackoverflow.com/a/29701061/225813 ) berhasil meskipun
Ashley Coolman
Saya mengedit jawaban saya. itu pasti berhasil untuk Anda .. Ashley Coolman
Shashi Verma
1
Anda tidak perlu menelepon init secara eksplisit dalam waktu 3.
ibrahimab
Apakah mungkin menggunakan lebih dari satu warna?
Gökhan Çokkeçeci
3
Apakah ada perbedaan antara kedua versi Anda?
Fogmeister
88

Di Swift 4 Anda dapat mengatur warna dan lebar perbatasan ke UIControls menggunakan kode di bawah ini.

let yourColor : UIColor = UIColor( red: 0.7, green: 0.3, blue:0.1, alpha: 1.0 )
yourControl.layer.masksToBounds = true
yourControl.layer.borderColor = yourColor.CGColor
yourControl.layer.borderWidth = 1.0

<Swift 4 , Anda dapat mengatur lebar bingkai dan warna bingkai UIView menggunakan kode di bawah ini.

yourView.layer.borderWidth = 1

yourView.layer.borderColor = UIColor.red.cgColor
Paras Joshi
sumber
1
@ShashiVerma sama-sama. Untuk detail mendalam tentang lapisan, baca dokumen referensi kelas objek berbeda dari apel, sehingga itu juga berguna bagi Anda :)
Paras Joshi
16

Gunakan @IBDesignable dan @IBInspectable untuk melakukan hal yang sama.

Mereka dapat digunakan kembali, dengan mudah dapat dimodifikasi dari Pembuat Antarmuka dan perubahannya langsung tercermin di Papan Cerita

Sesuaikan objek di storyboard dengan kelas tertentu

Cuplikan Kode:

@IBDesignable
class CustomView: UIView{

@IBInspectable var borderWidth: CGFloat = 0.0{

    didSet{

        self.layer.borderWidth = borderWidth
    }
}


@IBInspectable var borderColor: UIColor = UIColor.clear {

    didSet {

        self.layer.borderColor = borderColor.cgColor
    }
}

override func prepareForInterfaceBuilder() {

    super.prepareForInterfaceBuilder()
}

}

Mengizinkan modifikasi mudah dari Pembuat Antarmuka:

Pembuat Antarmuka

Supratik Majumdar
sumber
Saya lebih menyukai solusi ini karena ini adalah solusi yang dapat digunakan kembali di mana kami mengatur UIView ke customview tetapi masih menyisakan ruang lebih banyak perubahan.
n0rm
Ini adalah cara favorit saya untuk mencapainya tetapi dengan mode gelap, itu tidak bekerja dengan baik. Itu mendapat gaya warna MacOS saat ini dan menggunakan statis. Tapi dibangun @IBDesignabledan @IBInspectablesemuanya bekerja dengan baik, jadi harus ada cara bagi bea cukai untuk menggunakan Aset Warna dengan mode gelap / terang juga ~ ada yang tahu bagaimana mencapainya?
Pengembang Nomad
12

Anda dapat menulis ekstensi untuk menggunakannya dengan semua UIViews misalnya. UIButton, UILabel, UIImageView dll. Anda dapat menyesuaikan metode berikut sesuai kebutuhan Anda, tetapi saya pikir ini akan bekerja dengan baik untuk Anda.

extension UIView{

    func setBorder(radius:CGFloat, color:UIColor = UIColor.clearColor()) -> UIView{
        var roundView:UIView = self
        roundView.layer.cornerRadius = CGFloat(radius)
        roundView.layer.borderWidth = 1
        roundView.layer.borderColor = color.CGColor
        roundView.clipsToBounds = true
        return roundView
    }
}

Pemakaian:

btnLogin.setBorder(7, color: UIColor.lightGrayColor())
imgViewUserPick.setBorder(10)
Shardul
sumber
1
@luda saya rasa dia tidak punya banyak pilihan tentang bahasa api!
kata
8

cepat 3

func borderColor(){

    self.viewMenuItems.layer.cornerRadius = 13
    self.viewMenuItems.layer.borderWidth = 1
    self.viewMenuItems.layer.borderColor = UIColor.white.cgColor
}
Deepak Tagadiya
sumber
8

Swift 5.2 , UIView + Ekstensi

extension UIView {
    public func addViewBorder(borderColor:CGColor,borderWith:CGFloat,borderCornerRadius:CGFloat){
        self.layer.borderWidth = borderWith
        self.layer.borderColor = borderColor
        self.layer.cornerRadius = borderCornerRadius

    }
}

Anda menggunakan ekstensi ini;

yourView.addViewBorder(borderColor: #colorLiteral(red: 0.6, green: 0.6, blue: 0.6, alpha: 1), borderWith: 1.0, borderCornerRadius: 20)
ikbal
sumber
Anda melewatkan untuk menambahkan clipsToBounds = true
Bent El-Eslam
3

Tulis kode di file viewDidLoad()

self.view.layer.borderColor = anyColor().CGColor

Dan Anda dapat mengatur ColordenganRGB

func anyColor() -> UIColor {
    return UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
}

Pelajari sesuatu tentang CALayerdiUIKit

Ethan Joe
sumber
Entah bagaimana, itu tidak melakukan apa-apa kecuali Anda secara eksplisit mengatur lebar perbatasan juga.
Nicolas Miari
@NicolasMiari yang diharapkan ... Anda tidak dapat melihat warna perbatasan yang belum Anda tetapkan ukurannya.
Jono Guthrie
Maaf, saya lupa menyebutkan bahwa saya mengacu pada bidang teks ... yang tampaknya memiliki lebar batas default bukan nol sejak awal. Namun demikian, saya kesulitan untuk mendapatkan warna yang saya atur pantulan, sampai saya secara eksplisit mengatur lebar bingkai.
Nicolas Miari
3

swift 3.0

self.uiTextView.layer.borderWidth = 0.5
    self.txtItemShortDes.layer.borderColor = UIColor(red:205.0/255.0, green:205.0/255.0, blue:205.0/255.0, alpha: 1.0).cgColor
Chathura Jayanaka
sumber
3

Kita bisa membuat metode untuk itu. Gunakan saja.

public func createBorderForView(color: UIColor, radius: CGFloat, width: CGFloat = 0.7) {
    self.layer.borderWidth = width
    self.layer.cornerRadius = radius
    self.layer.shouldRasterize = false
    self.layer.rasterizationScale = 2
    self.clipsToBounds = true
    self.layer.masksToBounds = true
    let cgColor: CGColor = color.cgColor
    self.layer.borderColor = cgColor
}
Tuan Javed Multani
sumber
2

Swift 3.0.0

       groundTrump.layer.borderColor = UIColor.red.cgColor
Вадим Башуров
sumber
Alih-alih menambahkan jawaban baru, Anda pasti sudah mengirim permintaan edit ke penjawab asli
Rajan Maheshwari
@Rajanaheshwari Tolong no. Jangan menambahkan kode ke jawaban orang lain. Pembaruan harus diposting sebagai milik mereka sendiri, bukan ke jawaban lain. Dengan cara itu setiap poster bertanggung jawab atas apa yang mereka posting ...
Eric Aya
@EricAya ini bukan tentang memperbarui jawabannya. Ini adalah permintaan edit, mungkin di komentar ke penjawab. Apakah Anda mendapatkan apa yang saya coba sampaikan.
Rajan Maheshwari