UIViewController 中的隐藏子视图

Hidden subviews in UIViewController

取此代码:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var i = 0
        //let v1 = UIView(frame:CGRectMake(113, 111, 132, 194))
        //v1.backgroundColor = UIColor.redColor()
        //self.view.addSubview(v1)

        for v in self.view.subviews as! [UIView] {
            v.removeFromSuperview()
            i++
        }
        println(i)
    }
}

for 循环从父视图中删除所有子视图。在循环结束时,i 为 2,这意味着删除了 2 个子视图。由于我自己没有添加任何子视图,这些子视图是什么?

UIViewController 的视图 属性 可以有一些系统使用的内部子视图,这些可以根据 iOS 版本、上下文等而有所不同。如果你想要删除您自己创建的子视图,一种简单的方法是将 v1 UIView 声明为 ViewController class

的 属性
class ViewController: UIViewController {

    let v1 = UIView(frame:CGRectMake(113, 111, 132, 194))

    override func viewDidLoad() {
        super.viewDidLoad()

        //add the view
        v1.backgroundColor = UIColor.redColor()
        self.view.addSubview(v1)

        //remove the view
        v1.removeFromSuperview()
    }
}

默认的UIViewController中有两个隐藏层。 当您打印代码的输出时,您会发现

<_UILayoutGuide: 0x7f981a513750; frame = (0 0; 0 0); hidden = YES; layer = > <_UILayoutGuide: 0x7f981a5142f0; frame = (0 0; 0 0); hidden = YES; layer = >