美文网首页
controller的view无法改变frame

controller的view无法改变frame

作者: 三浦蒼介 | 来源:发表于2019-05-07 09:22 被阅读0次

开发过程中发现,有一个controller的view无论在viewdidload还是viewdidAppear里怎么也改不了它的大小。

1、 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)。

-[UIView(Hierarchy) addSubview:]

-[UIViewController _setViewAppearState:isAnimating:]

-[TestviewController viewDidAppear:]

2、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

- (void)viewWillLayoutSubviews

{

    self.view.frame = CGRectMake(0, 0, 50, 50);

}

同时可以设置autoSizeMask属性,调整缩放大小。 这时发生旋转后不再满屏

相关文章

  • controller的view无法改变frame

    开发过程中发现,有一个controller的view无论在viewdidload还是viewdidAppear里怎...

  • 解答

    1、改变view的frame,layer的frame是否会变化?改变layer.frame,view的frame是...

  • 技术笔试题

    技术笔试题: 1、 改变view的frame,layer的frame是否会变化?改变layer.frame,vie...

  • 键盘位置改变View跟着变化

    键盘位置改变View跟着变化 1、订阅键盘的frame即将改变的通知 //监听键盘frame变化 [[NSNoti...

  • mvc,mvp和mvvm介绍及三大框架对比

    mvc View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状...

  • mvc 和 mvvm

    MVC View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状...

  • MVC MVVM MVP

    MVC View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状...

  • translucent

    Controller view的frame 默认 是全屏,位置是从 屏幕顶点开始,高度为屏幕高度 。如下图: 由上...

  • iOS ---OC中的小知识点(1)

    1.缓存路径下文件大小 2.Popover push 时 Frame无法改变解决办法 在popover中的View...

  • tableview修改selectedBackgroundVie

    思路 selectedBackgroundView的frame无法修改,但可以替换 在替换的view上加上view...

网友评论

      本文标题:controller的view无法改变frame

      本文链接:https://www.haomeiwen.com/subject/fmpsoqtx.html