프로그래밍 방식으로 UIView의 사용자 정의 테두리 색상을 설정하는 방법은 무엇입니까?


99

Swift에서 프로그래밍 방식으로 UIView의 사용자 정의 테두리 색상을 설정하려고합니다.


3
질문에 관련 코드를 표시하십시오. 어떤 문제가 있는지 설명하십시오.
rmaddy

1
Cocoa Touch의 중복 가능성 : UIView의 테두리 색상과 두께를 변경하는 방법? 그냥 구라 방법으로 그것을 사용할 필요가
인더 쿠마르 라 토레

답변:


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을 사용하고 있기 때문입니까?). 파라 조시의 ( stackoverflow.com/a/29701061/225813 ) 버전은 작업 불구하고 한
애슐리 Coolman

나는 내 대답을 편집했다. 그것을 확인 .. 애슐리 Coolman 당신을위한 작업에
샤시 베르

1
신속한 3에서 명시 적으로 init를 호출 할 필요가 없습니다.
ibrahimab

여러 가지 색상을 사용할 수 있습니까?
Gökhan Ç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

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모두 잘 작동하므로 세관이 어둡거나 밝은 모드 모두에서 컬러 에셋을 사용할 수있는 방법이 있어야합니다.
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

스위프트 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 + Extension

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를 추가하지 못했습니다
Bent 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)
}

에 대해 뭔가 알아 CALayer인을UIKit


어쨌든 테두리 너비를 명시 적으로 설정하지 않는 한 아무 작업도 수행하지 않습니다.
Nicolas Miari

@NicolasMiari 예상되는 ... 크기를 설정하지 않은 테두리 색상을 볼 수 없습니다.
Jono Guthrie

죄송합니다. 처음부터 테두리 너비가 0이 아닌 것으로 보이는 텍스트 필드를 언급하는 것을 잊었습니다. 그러나 테두리 너비를 명시 적으로 설정할 때까지 설정 한 색상을 반영하는 데 어려움을 겪었습니다.
Nicolas Miari

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.