视图周围边框未对齐

问题描述 投票:0回答:1

我正在尝试在视图周围创建边框。为此,我使用视图大小的UIBezierPath创建一个图层,并使用笔触颜色创建另一个图层。然后,我将bezier图层分配给笔触颜色图层,并将其作为子图层添加到视图中。

以前有人遇到过吗?

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)
  }
}

Device

如果有人想知道约束可能是错误的,这里是情节提要配置:

Storyboard

View debugger

ios swift xcode uitextfield cashapelayer
1个回答
0
投票

我能够解决它,诀窍是像这样将边界实现放在viewDidLayoutSubviews中:

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)
  }
© www.soinside.com 2019 - 2024. All rights reserved.