iOS 中的额外 CALayer 子层

Extra CALayer's subLayers in iOS

我创建了一个用 swift 编写的新单视图项目并打印 self.view.layer.sublayers.count。数字是 2,但我没有添加任何层或 UIView。

override func viewDidLoad() {
    super.viewDidLoad()
    println(self.view.layer.sublayers.count)
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

不知道多出来的两层是什么

每个UIView背后都有一个CALayer,视图层级和图层层级是相互连接的

如果您打印出 subviews,您将看到该视图有两个 _UILayoutGuide 类型的子视图,分别代表控制器的 topLayoutGuidebottomLayoutGuide。每个子视图都有一个层,所以这是你的 2 个子层。

证明:

override func viewDidLoad() {
    super.viewDidLoad()

    print("Top layout guide layer: \((self.topLayoutGuide as! UIView).layer)");
    print("Bottom layout guide layer: \((self.bottomLayoutGuide as! UIView).layer)");
    print("Sublayers: \(self.view.layer.sublayers)");
}

打印:

Top layout guide layer: <CALayer: 0x7fef8ac28140>
Bottom layout guide layer: <CALayer: 0x7fef8ac27bc0>
Sublayers: Optional([<CALayer: 0x7fef8ac28140>, <CALayer: 0x7fef8ac27bc0>])