如何以编程方式设置UIView的自定义边框颜色?


Answers:


202

如果您使用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?)。Paras Joshi的(stackoverflow.com/a/29701061/225813)版本确实可以正常工作
Ashley Coolman

我编辑了答案。它一定会为您工作..阿什莉·库尔曼
Shashi Verma

1
您无需在
Swift

可以使用多种颜色吗?
格克汗Çokkeçeci

3
您的两个版本之间有什么区别吗?
Fogmeister

88

Swift 4中,您可以使用以下代码将边框颜色和宽度设置为UIControls。

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,您可以使用以下代码设置UIView的边框宽度和边框颜色。

yourView.layer.borderWidth = 1

yourView.layer.borderColor = UIColor.red.cgColor

1
@ShashiVerma不客气。有关图层的详细信息,请阅读apple的其他对象的类参考文档,因此对您也有帮助:)
Paras Joshi 2015年

16

使用@IBDesignable@IBInspectable进行相同的操作。

它们是可重用的,可以从Interface Builder轻松修改,并且更改会立即反映在Storyboard中。

使情节提要中的对象符合特定的类

代码段:

@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轻松修改:

界面生成器


我更喜欢这种解决方案,因为它是一种可重用的解决方案,在该解决方案中,我们将UIView设置为customview,但仍然留有更多更改空间。
n0rm

这是我最喜欢的方法,但是在黑暗模式下,它确实不能很好地工作。它获取当前MacOS的颜色样式并使用静态。但是内置@IBDesignable并且@IBInspectable所有都很好,所以海关也应该有一种方式也可以同时使用暗/亮模式的Color Assets〜有人知道如何实现吗?
Nomad Developer

12

您可以编写一个扩展程序以将其与所有UIView一起使用。UIButton,UILabel,UIImageView等。您可以根据需要自定义我的以下方法,但我认为它将对您很好。

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

用法:

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

1
@luda我认为他/她对api语言没有太多选择!
worthwords


8

Swift 5.2UIView +扩展

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

    }
}

您使用了该扩展名;

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

您错过添加clipsToBounds = true
弯曲的El-Eslam

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

了解一些关于CALayerUIKit


除非您也明确设置边框宽度,否则它什么也不做。
Nicolas Miari '16

@NicolasMiari这是可以预期的...您看不到尚未设置尺寸的边框颜色。
Jono Guthrie

抱歉,我忘了提起我是指文本字段...从一开始似乎确实具有默认的非零边框宽度。但是,在我明确设置边框宽度之前,我一直难以获得设置的颜色。
Nicolas Miari '16

3

迅捷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

我们可以为其创建方法。只需使用它。

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

斯威夫特3.0

       groundTrump.layer.borderColor = UIColor.red.cgColor

而不是增加新的答案,你必须发送一个编辑请求到原来的回答者
拉詹Maheshwari

@RajanMaheshwari请不要。不要将代码添加到其他人的答案中。更新应以自己的名义发布,而不是发布在其他答案中。这样,每个海报负责发布者的内容...
埃里克·艾雅

@EricAya不是更新答案。这是一个编辑请求,可能在答复者的注释中。你明白我的意思了吗?
Rajan Maheshwari
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.