Ios 视图周围未对齐的边框

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

我正在尝试在视图周围创建边框。为此,我创建了一个具有UIBezierPath视图大小的图层,并使用笔划颜色创建了另一个图层。然后我将bezier层指定给stroke color层,并将其作为子层添加到视图中

以前有人面对过这种情况吗

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我之所以不使用这种解决方案,是因为我需要自定义圆角(在特定的角上)