如何在viewWillAppear中获取视图控制器的框架,当呈现视图控制器时使用UIModalPresentationFormSheet

问题描述:

我想获取视图控制器的框架。视图控制器由具有选项'UIModalPresentationFormSheet'的另一个视图控制器呈现。如何在viewWillAppear中获取视图控制器的框架,当呈现视图控制器时使用UIModalPresentationFormSheet

我无法在方法'viewWillAppear'中获得正确的框架。视图控制器的大小是1024x768。只有在'viewDidAppear'方法中,我才能得到主视图的正确框架。我想在viewWillAppear中做一些布局,框架是必需的。我不想硬编码的大小。

+0

1024 x 768,听起来像iPad或其他东西,对吧? – Loxx

你不能在viewWillAppear中正确的框架,系统会给你viewDidAppear和viewWillLayoutSubviews,viewDidLayoutSubviews正确的帧。

如果您呈现的视图与屏幕高度,宽度相同,您可以使用[UIScreen mainScreen] .bound在viewWillAppear中获取正确的尺寸。但作为@rounak提到的把你的布局代码在viewWillLayoutSubviews,建议

把你的布局代码在viewWillLayoutSubviews上的UIViewController

你不需要硬编码,高度和宽度,只是宏观的东西,假设你是呈现全屏模式:

#define SCREEN_WIDTH ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height) 

#define SCREEN_HEIGHT ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width) 

你可以这样称呼它们:

SCREEN_HEIGHT和SCREEN_WIDTH;

从你的问题的长相,在UIViewController中被提出,其大小与一台iPad一样,所以这个窗口的大小与该应用程序的窗口一样,让你的框架是这样的:

CGRectMake(0,0,SCREEN_WIDTH,SCREEN_HEIGHT)