UIViewController中的隐藏子视图

时间:2015-06-21 23:44:12

标签: ios swift subview superview

拿这段代码:

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循环从superview中删除所有子视图。在循环结束时,i为2,表示删除了2个子视图。由于我自己没有添加任何内容,这些子视图是什么?

2 个答案:

答案 0 :(得分:2)

默认的UIViewController中有两个隐藏层。 当您打印代码的输出时,您将找到

  

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

答案 1 :(得分:0)

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

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