View Hierarchy

ResourceFrom:http://blog.sina.com.cn/s/blog_6de189920101jn4y.html

view hierarchy是用来说明在window中的view之间的关系的。 

可以把view hierarchy认为是一棵翻转的tree structure,而window就是这棵树的最上面的节点(根节点)。树的下面就是父子view之间的关系。从视觉上来看,view hierarchy就是一个封闭的结构,就是一个view包含一个或多个view,而window包含所有的view。


view hierarchy同时也是responder chain的重要部分,当我们需要渲染window中的内容的时候,应用程序的框架会用它来检测views的layer的层次,来决定需要渲染的部分,从而来避免做一些无用功,这点至关重要。


接下来来看下在view hierarchy中view的三个属性的定义关系

1.superview,view的父视图

2.subviews,view的子视图

3.window,包含view的window


关于第三个window属性,在iOS和Mac中是有区别的。

在iOS中window是一个view,在Mac中却不是。

在Mac中window有一个单独contentView,所有的子视图是包含在contentView中的。

在iOS中,window自己扮演了contentView的角色,所以子视图全部包含在window中。


如下图


在开发的时候,有时候会遇到

1.ios attempt to present whose view is not in the window hierarchy

2.Warning: Attempt to present on whose view is not in the window hierarchy!

等等这样类似的提示,只要里面提示有 window hierarchy,都是view hierarchy的理解不到位导致的。

上面的问题都是在一个controller的view还没加到window上的时候又取present另外一个controller,这就相当于在盖楼,2楼还没盖完,直接去盖3楼了,这样肯定是不行。

遇到上面的问题 最直接的解决方法就是在controller的viewDidAppear里面去调用present。这样可以确保view hierarchy的层次结构不乱。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值