如何在 ios 中设置视图的 UIBezierPath 边框?
How to set up UIBezierPath border for view in ios?
我使用以下代码创建了 CAShapeLayer
视图边框:
func addBorderToWebView() {
borderShape = CAShapeLayer()
borderShape.path = UIBezierPath(rect: webView.frame).cgPath
borderShape.lineWidth = CGFloat(2)
borderShape.bounds = borderShape.path!.boundingBox
borderShape.strokeColor = UIColor(red: 68/255, green: 219/255, blue: 94/255, alpha: 1.0).cgColor
borderShape.position = CGPoint(x: borderShape.bounds.width/2, y: borderShape.bounds.height/2)
webView.layer.addSublayer(borderShape)
}
我右边和底部的边框线在框架外,你可以在下图中看到它。但是,如果我定义 borderWidth
属性 of webView.layer
,一切似乎都很好。这就是为什么我得出结论,问题不在于布局约束。我应该如何配置UIBezierPath
(或CAShapeLayer
)才能正确显示边框?感谢您的帮助!
尝试替换这个
borderShape.path = UIBezierPath(rect: webView.frame).cgPath
有了这个:
borderShape.path = UIBezierPath(rect: webView.bounds).cgPath
问题的另一个可能原因是 webView
的框架在您将其设置为 borderShape
时尚未更新。您可以尝试在添加边框形状之前执行 self.view.updateLayoutIfNeeded()
。如果它不能帮助重写以下方法:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
updateBorderShape()
}
func updateBorderShape() {
borderShape.bounds = webView.bounds
borderShape.position = CGPoint(x: borderShape.bounds.width/2, y: borderShape.bounds.height/2)
}
这将确保每次更新框架时,边框形状也会更新。
我使用以下代码创建了 CAShapeLayer
视图边框:
func addBorderToWebView() {
borderShape = CAShapeLayer()
borderShape.path = UIBezierPath(rect: webView.frame).cgPath
borderShape.lineWidth = CGFloat(2)
borderShape.bounds = borderShape.path!.boundingBox
borderShape.strokeColor = UIColor(red: 68/255, green: 219/255, blue: 94/255, alpha: 1.0).cgColor
borderShape.position = CGPoint(x: borderShape.bounds.width/2, y: borderShape.bounds.height/2)
webView.layer.addSublayer(borderShape)
}
我右边和底部的边框线在框架外,你可以在下图中看到它。但是,如果我定义 borderWidth
属性 of webView.layer
,一切似乎都很好。这就是为什么我得出结论,问题不在于布局约束。我应该如何配置UIBezierPath
(或CAShapeLayer
)才能正确显示边框?感谢您的帮助!
尝试替换这个
borderShape.path = UIBezierPath(rect: webView.frame).cgPath
有了这个:
borderShape.path = UIBezierPath(rect: webView.bounds).cgPath
问题的另一个可能原因是 webView
的框架在您将其设置为 borderShape
时尚未更新。您可以尝试在添加边框形状之前执行 self.view.updateLayoutIfNeeded()
。如果它不能帮助重写以下方法:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
updateBorderShape()
}
func updateBorderShape() {
borderShape.bounds = webView.bounds
borderShape.position = CGPoint(x: borderShape.bounds.width/2, y: borderShape.bounds.height/2)
}
这将确保每次更新框架时,边框形状也会更新。