Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 调整UIView的大小以为ad单元留出空间_Ios_Objective C_Uiview_Uiwindow_React Native - Fatal编程技术网

Ios 调整UIView的大小以为ad单元留出空间

Ios 调整UIView的大小以为ad单元留出空间,ios,objective-c,uiview,uiwindow,react-native,Ios,Objective C,Uiview,Uiwindow,React Native,我试图在UIViewRCTRootView的子类之上添加一个广告单元。这会将RCTRootView向下移动约50px。这是我目前的尝试 RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"test"

我试图在UIView
RCTRootView
的子类之上添加一个广告单元。这会将
RCTRootView
向下移动约50px。这是我目前的尝试

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                  moduleName:@"test"
                                               launchOptions:launchOptions];



CGRect frame = rootView.frame;
  frame.size.height -= 50;
  rootView.frame = frame;

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  self.window.autoresizesSubviews = YES;
  UIViewController *rootViewController = [[UIViewController alloc] init];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
这是一个React原生项目,所以使用故事板。如何调整rootView的大小


如何在根视图(Ad单元)上方的UIWindow中实例化并附加viewController?

试试这个方法可能会有所帮助,但解决这个问题可能比更改屏幕大小更好

UIViewController *rootViewController = [[UIViewController alloc] init];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
rootViewController.view.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-50);

您可以使用容器视图控制器将两个视图控制器组合成一个

  • 创建containerViewController:

    UIViewController* containerViewController = [[UIViewController alloc] init];
    
  • 创建要添加到容器视图控制器的子视图控制器:

    UIViewController* containerViewController = [[UIViewController alloc] init];
    
    在您的例子中,它们将是
    rootViewController
    adViewController
    ,在本例中,我将它们称为
    firstChildViewController
    secondChildViewController

  • 按正确顺序将子视图控制器添加到容器视图控制器:

    如果
    firstChildViewController
    应位于
    secondChildViewController
    之上,则首先添加
    secondChildViewController
    ,然后添加
    firstChildViewController
    以创建右侧子视图层次结构)

    不要忘记布局子视图控制器的视图(TODO设置在需要的位置)。

    要布局容器视图,控制器的视图将其信任为常规的
    UIView
    ,并使用首选方法设置其坐标和大小(自动布局或手动布局)

    例如,若要将视图向下移动50px,您应该将俯视图的底部约束为俯视图的顶部,将俯视图的高度约束为50

  • 这样,您就可以根据需要布置两个视图控制器,只需将
    containerViewController
    设置为
    window
    rootViewController

    [window setRootViewController:containerViewController];
    

    希望它能有所帮助。

    正如mihir mehta所建议的,故事板是在iOS中处理UI最方便的方法。这里是一个链接,您可以从中学习添加故事板。
    还有很多关于这个主题的教程。

    我建议使用自动布局。比这简单得多。关于如何开始向项目中添加故事板的建议?米希尔?你的代码的结果是什么?你能分享屏幕截图吗!我可能遗漏了一些明显的东西,但如果这是一个React原生项目,为什么要在Obj-C中这样做?这似乎是RN和JSX非常方便的类型。
    [window setRootViewController:containerViewController];