如何在 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)
}

这将确保每次更新框架时,边框形状也会更新。