代码之家  ›  专栏  ›  技术社区  ›  black_pearl

iOS地址层:如何正确布局?

  •  0
  • black_pearl  · 技术社区  · 7 年前

    当向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

    我错过了什么?

    0 回复  |  直到 7 年前