Ios 将UIViewController的视图调整为父UIWindow的边界大小

Ios 将UIViewController的视图调整为父UIWindow的边界大小,ios,iphone,uiviewcontroller,uiwindow,Ios,Iphone,Uiviewcontroller,Uiwindow,我想为UIViewController的视图指定一个与设备屏幕大小不同的大小。我知道我通常可以通过将视图控制器添加为另一个父UIViewController的子视图控制器来实现这一点,该父UIViewController已为子视图控制器定义了一个框架,但我所处的情况似乎有点不同 我有一个UIWindow,只占屏幕的一部分,它的框架基本上是0,0,设备的宽度,高度小于设备的高度。此窗口显示时具有适当的大小和位置。我将视图控制器设置为窗口的rootViewController,然后通过将其隐藏值设置

我想为UIViewController的视图指定一个与设备屏幕大小不同的大小。我知道我通常可以通过将视图控制器添加为另一个父UIViewController的子视图控制器来实现这一点,该父UIViewController已为子视图控制器定义了一个框架,但我所处的情况似乎有点不同

我有一个UIWindow,只占屏幕的一部分,它的框架基本上是0,0,设备的宽度,高度小于设备的高度。此窗口显示时具有适当的大小和位置。我将视图控制器设置为窗口的rootViewController,然后通过将其隐藏值设置为false来显示窗口。发生这种情况时,视图控制器的视图大小最终会填充设备的屏幕,即0、0、设备宽度、设备高度的帧

我希望视图控制器从UIWindow继承其大小,它被设置为的根视图控制器。有办法做到这一点吗

我还尝试覆盖loadView并在那里返回自定义大小的视图。记录视图会显示视图控制器的视图对象在viewDidLoad期间大小正确,但会被ViewWillDisplay以默认大小覆盖:。如果无法从窗口继承大小,我愿意使用loadView调整视图控制器的大小,但我不知道如何使自定义大小保持不变


注意:我尝试将视图控制器添加到窗口的原因是因为我想利用视图控制器生命周期方法,如ViewDidDisplay:,这就是为什么我不只是创建一个简单的UIView并将其添加为窗口的子视图。

尽管看起来有悖常理,如果在view上设置set self.view.frame将显示IOS 8或VIEWDID显示IOS 7,则可以使其正常工作

Swift代码IOS 8:

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        // Banner style size, for example
        self.view.frame = CGRectMake(0, 0, 320, 50) 
}
对于IOS 7,我不得不使用viewDidAppear,这显然是一个不令人满意的解决方案。因此,在修改self.view.frame之后,我必须以alpha=0.0启动视图,并在ViewDidDisplay上设置alpha=1.0


希望有帮助。

这似乎是解决这个问题的好办法,但不是我想要走的路。显然,这似乎是一个有价值的策略,但我感兴趣的是,是否有一种方法可以让视图控制器从其环境中而不是从默认值中获取此信息。在ViewDidAspect上,您可以访问window对象self.view.window。只需将self.view.frame设置为与窗口的边框匹配即可。在将其设置为新窗口的rooViewController之前,您还可以将参数发送给控制器。我们确实不应该通过CGRectMake0、0、320、50硬编码帧大小,这不会调整为不同的屏幕大小。