2015-04-17 104 views
60

我想在Swift中以編程方式設置UIView的自定義邊框顏色。如何以編程方式設置UIView的自定義邊框顏色?

+3

在您的問題中顯示相關的代碼。解釋你有什麼問題。 – rmaddy

+1

[可可觸摸:如何更改UIView的邊框顏色和厚度的可能的重複?](http://stackoverflow.com/questions/3330378/cocoa-touch-how-to-change-uiviews-border-color-and-thickness )你只需要以更快捷的方式使用它 –

回答

137

如果你想自定義顏色,使用下面的代碼...

如果您使用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 

如果您使用SWIFT 3.1或後者 -

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

注意:這似乎沒有爲我工作(也許是因爲我在迅速3.1?)。帕拉斯喬希的(https://stackoverflow.com/a/29701061/225813)版本確實工作,雖然 –

+0

我編輯了我的答案。它肯定會爲你工作.. Ashley Coolman –

+1

你不需要在swift 3中明確地調用init。 – ibrahimab

56

您可以使用下面的代碼設置UIView的邊框寬度和邊框顏色。

yourView.layer.borderWidth = 1 

yourView.layer.borderColor = UIColor.red.cgColor 
+1

@ShashiVerma歡迎您。有關圖層的深層細節,請閱讀蘋果的不同對象的類參考文檔,以便對您有所幫助:) –

3

把代碼寫在你的viewDidLoad()

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

,你可以設置ColorRGB

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

瞭解CALayer的東西UIKit

+0

不知何故,除非您明確設置邊框寬度,否則它什麼也不做。 –

+0

@NicolasMiari會被期望......你看不到你沒有設置大小的邊框顏色。 –

+0

對不起,我忘了提及我指的是文本字段......它似乎從一開始就具有默認的非零邊框寬度。但是,我努力讓自己設定的顏色反映出來,直到我明確設置了邊框寬度。 –

8

您可以編寫一個擴展名,將其與所有UIViews一起使用。 UIButton,UILabel,UIImageView等。 您可以根據您的要求定製我的以下方法,但我認爲它適用於您。

extension UIView{ 

    func _गोल_करा(radius:CGFloat, color:UIColor = UIColor.clearColor()) -> UIView{ 
     var rounfView:UIView = self 
     rounfView.layer.cornerRadius = CGFloat(radius) 
     rounfView.layer.borderWidth = 1 
     rounfView.layer.borderColor = color.CGColor 
     rounfView.clipsToBounds = true 
     return rounfView 
    } 
} 

用法:

btnLogin._गोल_करा(7, color: UIColor.lightGrayColor()) 
imgViewUserPick._गोल_करा(10) 
+7

你確定在代碼中混合語言是一個好主意嗎? – Luda

+1

@luda我不認爲他/她對api語言有很多選擇! – worthwords

2

雨燕3.0

 groundTrump.layer.borderColor = UIColor.red.cgColor 
+0

而不是添加一個新的答案,你必須發送一個編輯請求到原來的回答者 –

+0

@RajanMaheshwari請不要。不要將代碼添加到其他人的答案中。更新應該自己發佈,而不是其他答案。這樣,每個海報負責他們發佈的內容... – Moritz

+0

@EricAya它不是更新答案。這是一個編輯請求,可能在回覆者的評論中。你有什麼我想傳達的。 –

11

使用@IBDesignable@IBInspectable做同樣的。

它們可重複使用的,從界面生成器和所述變化易於修改立即在故事板

反射順應在故事板中的對象的特定類

代碼段:

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

} 

允許從界面生成器容易變形例:

Interface Builder

+0

我更喜歡這個解決方案,因爲它是一個可重用的解決方案,我們將UIView設置爲customview,但仍然留下更多變化。 – JensDebergh

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 
8

SWIFT 3

func borderColor(){ 

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

我們可以爲它創建方法。簡單地使用它。

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 
} 
相關問題