Обивка границ для UIView - PullRequest
0 голосов
/ 06 марта 2019

Я создал стандартную границу вокруг своего UIView следующим образом:

 vwGroup.layer.borderColor = UIColor.yellow.cgColor
 vwGroup.layer.borderWidth = 2.0;

, но я хотел бы иметь 5px отступа / поля / отступа между UIView и границей, которая его окружает.

Прямо сейчас он просто рисует границу вокруг себя.Я хотел бы вытолкнуть его, чтобы между ними было свободное пространство.

Есть предложения?Я подозреваю, что вставки - это путь, но я не могу понять это.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Вставки - это не тот путь.Вы используете вставку для отступления внутреннего содержимого представления от его полей.Для этого вам лучше всего обернуть vwGroup в другой UIView и установить границу в режиме обтекания.Что-то вроде:

let wrappingView = UIView(frame: someFrame)
wrappingView.backgroundColor = .clear
wrappingView.layer.borderColor = UIColor.yellow.cgColor
wrappingView.layer.borderWidth = 2.0;
wrappingView.addSubview(vwGroup)

Конечно, это только для вас, чтобы получить общую картину.Возможно, вы захотите установить правильные рамки / ограничения.

0 голосов
/ 06 марта 2019

Попробуйте, это полезно для вас.

Сначала добавьте это расширение

extension CALayer {
    func addGradientBorder(colors:[UIColor],width:CGFloat = 1) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame =  CGRect(origin: CGPoint.zero, size: self.bounds.size)
        gradientLayer.startPoint = CGPoint(x:0.0, y:0.0)
        gradientLayer.endPoint = CGPoint(x:1.0,y:1.0)
        gradientLayer.colors = colors.map({$0.cgColor})

        let shapeLayer = CAShapeLayer()
        shapeLayer.lineWidth = width
        shapeLayer.path = UIBezierPath(rect: self.bounds).cgPath
        shapeLayer.fillColor = nil
        shapeLayer.strokeColor = UIColor.red.cgColor
        gradientLayer.mask = shapeLayer

        self.addSublayer(gradientLayer)
    }
}

Затем добавьте UIView с рамкой

let vwGroup = UIView(frame: CGRect(x: 50, y: 150, width: 200, height: 200))
vwGroup.backgroundColor = .red

//-- This is for padding between boarder and view -- you can set padding color ---
vwGroup.layer.addGradientBorder(colors:[UIColor.black,UIColor.black] , width: 40)

//--  This is for outer boarder -- you can also change the color of outer boarder --
vwGroup.layer.addGradientBorder(colors:[UIColor.white,UIColor.white] , width: 10)
self.view.addSubview(vwGroup)

Вывод:

enter image description here

...