首页 > 解决方案 > iOS addLayer:如何布局正确?

问题描述

当向 viewController 的视图添加一些虚线时,通过添加子层。

这是代码:


class ViewController: UIViewController {
    @IBOutlet weak var tmpLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        tmpLabel.layer.borderColor = UIColor.red.cgColor;
        tmpLabel.layer.borderWidth = 2
        tmpLabel.addDashedBorders(padding: 50, y: tmpLabel.bounds.size.height * 0.5)
        // ......
}}


extension UIView {


    func addDashedBorders( padding x: CGFloat, y : CGFloat) {
        //Create a CAShapeLayer
        let shapeLayer = CAShapeLayer()
        shapeLayer.strokeColor = UIColor.red.cgColor
        shapeLayer.lineWidth = 2
        shapeLayer.lineDashPattern = [2,3]

        let path = CGMutablePath()
        path.addLines(between: [CGPoint(x: x, y: y),
                                CGPoint(x: bounds.size.width * 0.5 - 50, y: y)])
        path.addLines(between: [CGPoint(x: bounds.size.width * 0.5 + 50, y: y),
                                CGPoint(x: bounds.size.width - x, y: y)])
        shapeLayer.path = path
        layer.addSublayer(shapeLayer)
    }
}

下图在 iPhoneX 中

000

代码是硬编码的,而且不好。

111

我想将子形状图层添加到标签正下方的视图中。

有代码


class ViewController: UIViewController {
    @IBOutlet weak var tmpLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        tmpLabel.layer.borderColor = UIColor.red.cgColor;
        tmpLabel.layer.borderWidth = 2
        view.addDashedBorder(padding: 50, y: tmpLabel.frame.origin.y)
        //...
}}


extension UIView {
    func addDashedBorder( padding x: CGFloat, y : CGFloat) {

        let shapeLayer = CAShapeLayer()
        shapeLayer.strokeColor = UIColor.red.cgColor
        shapeLayer.lineWidth = 2
        shapeLayer.lineDashPattern = [2,3]

        let path = CGMutablePath()
        path.addLines(between: [CGPoint(x: x, y: y),
                                CGPoint(x: bounds.size.width - x, y: y)])
        shapeLayer.path = path
        layer.addSublayer(shapeLayer)
    }
}



我在iPhoneX上测试过,还有一段距离。

我试过view.safeAreaInsets了,都是零。

我想念什么?

标签: iosswiftlayout

解决方案


推荐阅读