【问题标题】:how to get the frame of a view controller in viewWillAppear when the view controller is presented use UIModalPresentationFormSheet当视图控制器出现时如何在 viewWillAppear 中获取视图控制器的框架使用 UIModalPresentationFormSheet
【发布时间】:2015-09-07 16:14:24
【问题描述】:

我想获取视图控制器的框架。视图控制器由另一个带有选项“UIModalPresentationFormSheet”的视图控制器呈现。

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

【问题讨论】:

  • 1024 x 768,听起来像 iPad 什么的,对吧?

标签: ios


【解决方案1】:

您无法在 viewWillAppear 中获取正确的框架,系统会在 viewDidAppear 和 viewWillLayoutSubviews、viewDidLayoutSubviews 中为您提供正确的框架。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      假设您正在呈现全屏模式,您不需要硬编码、高度和宽度,只需宏化这些东西:

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

      【讨论】:

        猜你喜欢
        • 2012-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2019-07-03
        相关资源
        最近更新 更多