Ios 视图周围未对齐的边框
我正在尝试在视图周围创建边框。为此,我创建了一个具有UIBezierPath视图大小的图层,并使用笔划颜色创建了另一个图层。然后我将bezier层指定给stroke color层,并将其作为子层添加到视图中 以前有人面对过这种情况吗Ios 视图周围未对齐的边框,ios,swift,xcode,uitextfield,cashapelayer,Ios,Swift,Xcode,Uitextfield,Cashapelayer,我正在尝试在视图周围创建边框。为此,我创建了一个具有UIBezierPath视图大小的图层,并使用笔划颜色创建了另一个图层。然后我将bezier层指定给stroke color层,并将其作为子层添加到视图中 以前有人面对过这种情况吗 class ViewController: UIViewController { @IBOutlet weak var rectangleView: UIView! override func viewDidLoad() { super.view
class ViewController: UIViewController {
@IBOutlet weak var rectangleView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let bezierLayer = CAShapeLayer()
bezierLayer.bounds = rectangleView.frame
bezierLayer.position = rectangleView.center
bezierLayer.path = UIBezierPath(rect: rectangleView.bounds).cgPath
let borderLayer = CAShapeLayer()
borderLayer.bounds = rectangleView.frame
borderLayer.position = rectangleView.center
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.black.cgColor
borderLayer.lineWidth = 1
borderLayer.path = bezierLayer.path
rectangleView.layer.addSublayer(borderLayer)
}
}
如果有人怀疑约束可能是错误的,那么下面是故事板配置:
我能够解决这个问题,诀窍是将边框实现放在
viewdilayoutsubviews
中,如下所示:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
rectangleView.layer.sublayers?.forEach {
guard let layer = $0 as? CAShapeLayer else { return }
layer.removeFromSuperlayer()
}
let bezierLayer = CAShapeLayer()
bezierLayer.frame = rectangleView.bounds
bezierLayer.path = UIBezierPath(rect: rectangleView.bounds).cgPath
let borderLayer = CAShapeLayer()
borderLayer.frame = rectangleView.bounds
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.black.cgColor
borderLayer.lineWidth = 1
borderLayer.path = bezierLayer.path
rectangleView.layer.addSublayer(borderLayer)
}
layer.frame=rectangleView.bounds
应该足够了。两层都不需要边界
+中心
。只有这样才能做到。另外,能否在viewDidLoad()
和didLayoutSubview()中打印rectangleView
的大小?建议:为什么不按rectangleView.layer.borderWidth=1.0;rectangleView.layer.borderColor=UIColor.black.cgColor
而不是创建一个全新的子层?您是否尝试过使用视图层次调试器?您应该能够在运行时单击视图并检查框架、边框等。在视图调试器上也可以,也可以使用该问题的屏幕截图编辑问题@bkwebhero@AhmadF我之所以不使用这种解决方案,是因为我需要自定义圆角(在特定的角上)