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

时间:2015-03-18 19:02:43

标签: ios iphone uiviewcontroller uiwindow

我想给UIViewController view一个与设备屏幕尺寸不同的尺寸。我知道我通常可以通过将视图控制器添加为为孩子定义框架的另一个父UIViewController的子视图控制器来实现这一点,但我处于一种似乎有点不同的情况。

我有UIWindow只占据屏幕的一部分(它的框架基本上是(0, 0, DEVICE_WIDTH, HEIGHT_LESS_THAN_DEVICE_HEIGHT)。此窗口显示正确的大小和定位。我正在设置将控制器视为窗口的rootViewController,然后通过将其hidden值设置为false来显示窗口。当发生这种情况时,视图控制器的视图最终会调整大小以填充设备的屏幕(即(0, 0, DEVICE_WIDTH, DEVICE_HEIGHT))的框架。

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

我还尝试覆盖loadView()并在那里返回自定义大小的视图。记录视图显示视图控制器的view对象在viewDidLoad期间的大小正确,但被viewWillAppear:的默认大小覆盖。如果不能从窗口继承大小调整,我可以使用loadView()来调整视图控制器的大小,但我不知道如何使自定义大小粘贴。

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

1 个答案:

答案 0 :(得分:0)

如果你看起来很直观,如果在viewWillAppear(IOS 8)或viewDidAppear(IOS 7)上设置set self.view.frame,你就可以使它工作。

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开始视图并在viewDidAppear上设置alpha = 1.0。

希望它有所帮助。