UIViewController view的加载情况,以及frame怎样改变问题

 我来答
好景当为羊角飞D
2017-09-15 · TA获得超过220个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:216万
展开全部
一、view的加载过程
contrller初始化是并未对view进行处理,这时view的属性为nil。 之后一旦访问view的属性,只要为nil,那么则会开始加载view。 如果有nib,则会从nib自动加载。 如果没有则调用controller的loadview方法。 此时在loadview里,若使用【super loadview】则会根据window的大小,创建一个默认的view。 如果要自定义view,则不要去调这行代码。 之后view属性设置好以后,则会调用viewdidload; 而viewWillAppear和viewDidAppear则是在addsubview的时候调的,(调试时可以看到以下调用信息。猜想是判断view有没有controller,有的话在addsubview的时候就去调viewWillAppear和viewDidAppear)。
二、controller的veiw改变大小。

在TestViewController里,viewDidLoad里改变它自己view的大小有效了,是可以改变的。 那么为什么会存在之前的问题呢? 仔细分析后是因为之前那个controller设置的是window的rootViewController,而window的开始是设定好的,此时它rootviewcontroller的view的大小则是恒定的(始终为满屏显示),在rootviewcontroller里无法更改。更改的办法必须在[self.window makeKeyAndVisible] 用controller.view.frame = XXX 更改。但是问题又出现了,更改一次可以,但是一旦发生旋转,又回到满屏状态。

原因是在window的rootviewcontroller 在旋转时,环境context是window,会以满屏显示的尺寸去重新剪裁和layout,导致rootviewcontroll的view又满屏显示。此时可以在 rootviewcontroller 的 -(void)viewWillLayoutSubviews里设置view的frame
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式