Измените размер UIView, чтобы разрешить пространство для рекламного блока.

Я пытаюсь добавить рекламный блок над подклассом UIView RCTRootView. Это переместит RCTRootView примерно на 50 пикселей. Это моя текущая попытка.

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 Native, поэтому используйте StoryBoard. Как изменить размер rootView?

Как я могу создать экземпляр и добавить viewController в UIWindow, который находится выше rootView (рекламного блока)?

Ответ 1

Попробуйте это, возможно, это поможет, но, вероятно, решение этого - это React лучше, чем изменение размера экрана

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

Ответ 2

Вы можете использовать контроллер вида контейнера, чтобы составить составные 2 контроллера представления в один.

  1. Создать контейнерViewController:

    UIViewController* containerViewController = [[UIViewController alloc] init];
    
  2. Создайте контроллеры дочерних представлений, которые вы добавите в контроллер контейнера:

    В вашем случае они будут rootViewController и adViewController, в примере я буду называть их firstChildViewController и secondChildViewController).

    UIViewController* firstChildViewController = [[UIViewController alloc] init];
    UIViewController* secondChildViewController = [[UIViewController alloc] init];
    
  3. Добавьте контроллеры дочерних элементов в контроллер контейнера в правильном порядке:

    Если firstChildViewController должен быть выше secondChildViewController, сначала добавьте secondChildViewController а затем firstChildViewController для создания иерархии правильных подзапросов).

    Не забывайте о расположении ваших представлений диспетчера представлений вашего ребенка (TODO устанавливается там, где это необходимо).

    [containerViewController addChildViewController:firstChildViewController];
    [containerViewController.view addSubview:firstChildViewController.view];
    // TODO: layout firstChildViewController.view in containerViewController.view here
    [firstChildViewController didMoveToParentViewController:containerViewController];
    
    [containerViewController addChildViewController:secondChildViewController];
    [containerViewController.view addSubview:secondChildViewController.view];
    // TODO: layout secondChildViewController.view in containerViewController.view here
    [secondChildViewController didMoveToParentViewController:containerViewController];
    

    В представлениях диспетчера представлений контейнера макета доверяет им обычный UIView и использует предпочтительный метод для установки их координат и размеров (автозапуск или макет вручную).

    Чтобы переместить вид вниз на 50 пикселей, вы должны, например, ограничить нижнюю часть верхнего вида сверху верхней части и высотой верхнего вида до 50.

Там вы идете, у вас есть два диспетчера представлений, как вам нужно, и все, что вам нужно сделать, - установить containerViewController в window rootViewController:

[window setRootViewController:containerViewController];

Надеюсь, это поможет.

Ответ 3

Как предложил mihir mehta раскадровка - наиболее удобный способ обработки пользовательского интерфейса в iOS. Вот ссылка, откуда вы можете научиться добавлять рассказ. Создание новой раскадровки в XCode и ее основной (черный экран в симуляторе). Также есть обширные учебные пособия по теме.