Creé un borde estándar alrededor de mi UIView así:
vwGroup.layer.borderColor = UIColor.yellow.cgColor vwGroup.layer.borderWidth = 2.0;pero me gustaría tener 5px de relleno/margen/espaciado entre UIView y el borde que lo rodea.
En este momento, solo dibuja el borde inmediatamente a su alrededor. Me gustaría empujarlo para que haya espacio libre entre ellos.
¿Alguna sugerencia? Sospecho que las inserciones son el camino a seguir, pero no puedo resolverlo.
¡Gracias!
Las inserciones no son el camino a seguir. Se usa el recuadro para rellenar el contenido interno de una vista desde sus márgenes. Para lo que necesita, su mejor opción es envolver su vwGroup dentro de otra UIView y establecer el borde en la vista de ajuste. Algo como:
let wrappingView = UIView(frame: someFrame) wrappingView.backgroundColor = .clear wrappingView.layer.borderColor = UIColor.yellow.cgColor wrappingView.layer.borderWidth = 2.0; wrappingView.addSubview(vwGroup)Por supuesto, esto es solo para que usted tenga una idea general. Es posible que desee establecer marcos/restricciones adecuados.
rápido 5.4
llamar así:
customView.layer.innerBorder()lo hizo, agregando una subcapa
extension CALayer { func innerBorder(borderOffset: CGFloat = 24.0, borderColor: UIColor = UIColor.blue, borderWidth: CGFloat = 2) { let innerBorder = CALayer() innerBorder.frame = CGRect(x: borderOffset, y: borderOffset, width: frame.size.width - 2 * borderOffset, height: frame.size.height - 2 * borderOffset) innerBorder.borderColor = borderColor.cgColor innerBorder.borderWidth = borderWidth innerBorder.name = "innerBorder" insertSublayer(innerBorder, at: 0) } }Prueba esto, te será útil.
Primero, agregue esta extensión
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) } }Luego agregue la UIView con borde
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)La salida es: