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

时间:2015-08-21 07:03:23

标签: ios

我想获得一个视图控制器的框架。视图控制器由另一个视图控制器显示,其中包含选项' UIModalPresentationFormSheet'。

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

3 个答案:

答案 0 :(得分:3)

将您的布局代码放在UIViewController上的viewWillLayoutSubviews

答案 1 :(得分:3)

您无法在viewWillAppear中获取正确的帧,系统将在viewDidAppear和viewWillLayoutSubviews,viewDidLayoutSubviews中为您提供正确的帧。

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

答案 2 :(得分:1)

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

#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)