UIView’ün özel kenarlık rengi programlı olarak nasıl ayarlanır?


Yanıtlar:


201

Swift 2.0+ kullanıyorsanız

self.yourView.layer.borderWidth = 1
self.yourView.layer.borderColor = UIColor(red:222/255, green:225/255, blue:227/255, alpha: 1).cgColor

Not: Bu benim için işe yaramadı (belki de hızlı 3.1'de olduğum için?). Paras Joshi'nin ( stackoverflow.com/a/29701061/225813 ) sürümü işe yaradı
Ashley Coolman

Cevabımı düzenledim. senin için çalışacağından eminim .. Ashley Coolman
Shashi Verma

1
Açıkça Swift 3'te ihtiyaç init aramaya yok
ibrahimab

Birden fazla renk kullanmak mümkün mü?
Gökhan Çokkeçeci

4
İki versiyonunuz arasında herhangi bir fark var mı?
Fogmeister

88

In Swift 4 Eğer sınır rengini ayarlayabilir ve kod aşağıda kullanarak UIControls için genişliği.

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 , Aşağıdaki kodu kullanarak UIView'un kenarlık genişliğini ve kenarlık rengini ayarlayabilirsiniz.

yourView.layer.borderWidth = 1

yourView.layer.borderColor = UIColor.red.cgColor

1
@ShashiVerma hoş geldiniz. Bu da :) sizin için yararlı olacak şekilde katmanları hakkında derin ayrıntı için, elma farklı nesnenin sınıf referans belgeleri okuma
Paras Joshi

16

Aynısını yapmak için @IBDesignable ve @IBInspectable kullanın .

Yeniden kullanılabilirler, Arayüz Oluşturucu'dan kolayca değiştirilebilirler ve değişiklikler anında Öykü Paneline yansıtılır

Film şeridindeki nesneleri belirli bir sınıfa uygun hale getirin

Kod Parçacığı:

@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()
}

}

Arayüz Oluşturucu'dan kolay değişiklik yapılmasına izin verir:

Arayüz Oluşturucu


Bu çözümü daha çok seviyorum, çünkü UIView'ı özel görünüme ayarladığımız ancak yine de odadan daha fazla değişiklik bıraktığımız yeniden kullanılabilir bir çözüm.
n0rm

Bunu başarmanın en sevdiğim yolu buydu ama karanlık modda pek iyi çalışmıyor. Mevcut MacOS'un renk stilini alır ve statik kullanır. Ancak inşa edin @IBDesignableve @IBInspectableher şey iyi çalışıyor, bu nedenle gümrükler için Renk Varlıklarını hem karanlık hem de açık modda kullanmanın bir yolu olmalı ~ bunu nasıl başarabileceğini kimse biliyor mu?
Nomad Developer

12

Tüm UIViews ile kullanmak için bir uzantı yazabilirsiniz, örn. UIButton, UILabel, UIImageView vb. Aşağıdaki yöntemimi ihtiyacınıza göre özelleştirebilirsiniz, ancak sizin için iyi çalışacağını düşünüyorum.

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
    }
}

Kullanım:

btnLogin.setBorder(7, color: UIColor.lightGrayColor())
imgViewUserPick.setBorder(10)

1
@luda api dili hakkında pek fazla seçeneği olduğunu sanmıyorum!
worthwords

8

hızlı 3

func borderColor(){

    self.viewMenuItems.layer.cornerRadius = 13
    self.viewMenuItems.layer.borderWidth = 1
    self.viewMenuItems.layer.borderColor = UIColor.white.cgColor
}

8

Swift 5.2 , UIView + Uzantı

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

    }
}

Bu uzantıyı kullandınız;

yourView.addViewBorder(borderColor: #colorLiteral(red: 0.6, green: 0.6, blue: 0.6, alpha: 1), borderWith: 1.0, borderCornerRadius: 20)

clipToBounds eklemeyi kaçırdınız = true
Bent El-

3

Kodu kendi viewDidLoad()

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

Ve Colorile ayarlayabilirsinizRGB

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

Hakkında bir şeyler öğrenmek CALayerdeUIKit


Bir şekilde, sınır genişliğini de açıkça ayarlamadığınız sürece hiçbir şey yapmaz.
Nicolas Miari

@NicolasMiari beklenen olurdu ... Boyut belirlemediğiniz bir kenarlık rengini göremezsiniz.
Jono Guthrie

Maalesef, başlangıçtan itibaren varsayılan sıfır olmayan bir kenar genişliğine sahip görünen metin alanlarına atıfta bulunduğumu söylemeyi unuttum. Bununla birlikte, sınır genişliğini açıkça ayarlayana kadar ayarladığım rengi yansıtmak için mücadele ettim.
Nicolas Miari

3

hızlı 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

3

Bunun için yöntem oluşturabiliriz. Basitçe kullanın.

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
}

2

Swift 3.0

       groundTrump.layer.borderColor = UIColor.red.cgColor

Yeni bir cevap eklemek yerine, asıl cevaplayıcıya bir düzenleme isteği göndermiş olmalısınız
Rajan Maheshwari

@RajanMaheshwari Lütfen hayır. Başkalarının yanıtlarına kod eklemeyin. Güncellemeler diğer yanıtlara değil, kendileri olarak yayınlanmalıdır. Bu şekilde, her poster
Eric Aya

@EricAya, cevabı güncellemeyle ilgili değil. Bu bir düzenleme isteğidir, yanıtlayana yapılan yorumlarda olabilir. İletmeye çalıştığım şeyi aldın mı?
Rajan Maheshwari
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.