Як програмно встановити спеціальний колір межі UIView?


99

Я намагаюся встановити спеціальний колір межі UIView програмно в Swift.


3
Покажіть відповідний код у своєму запитанні. Поясніть, яке питання у вас виникає.
rmaddy

1
можливий дублікат какао-дотику: як змінити колір і товщину межі UIView? Вам просто потрібно використовувати його швидко
Inder Kumar Rathore

Відповіді:


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

Примітка: це, здається, не працює для мене (можливо, тому, що я на швидкому 3.1?). Версія
Параса

Я відредагував свою відповідь. це обов'язково працює для вас .. Ешлі Coolman
Шаші Верма

1
Вам не потрібно чітко закликати init у швидкому 3.
ibrahimab

Чи можна використовувати більше одного кольору?
Gökhan Çokkeçeci

3
Чи є різниця між вашими двома версіями?
Фогмайстер

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 ласкаво просимо. Щоб отримати детальну інформацію про шари, прочитайте довідкові документи різних об'єктів для яблук, щоб це також було корисно для вас :)
Paras Joshi

16

Використовуйте @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:

Інтерфейс Builder


Мені це рішення подобається більше, оскільки воно є багаторазовим, коли ми встановили UIView у власному перегляді, але все ж залишає місце для додаткових змін.
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!
варті слова

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

І ви можете встановити ColorсRGB

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

Вибачте, я забув згадати, що я мав на увазі текстові поля ..., які, здається, мають початкову ненульову ширину межі з самого початку. Однак я намагався відобразити заданий нами колір, поки я чітко не встановив ширину межі.
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

Swift 3.0

       groundTrump.layer.borderColor = UIColor.red.cgColor

Замість того, щоб додавати нову відповідь, ви, мабуть, надіслали запит на редагування первинному відповідателю
Раджан Махешварі

@RajanMaheshwari Будь ласка, ні. Не додайте код до відповідей інших людей. Оновлення слід розміщувати як власні, а не на інші відповіді. Таким чином кожен плакат відповідає за те, що вони розміщують ...
Ерік Айя

@EricAya йдеться не про оновлення відповіді. Це запит на редагування, може бути в коментарях до відповідача. Ви отримали те, що я намагався передати.
Раджан Махешварі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.