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

#ios #uiview #uiviewcontroller

#iOS #uiview #uiviewcontroller

Вопрос:

Я использую следующий код в своем делегате приложения для программного создания окна приложения и корневого контроллера:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = [[UIViewController alloc] init];
    self.window.rootViewController.view = [[UIView alloc] init];
    self.window.rootViewController.view.backgroundColor = [UIColor redColor];
    return TRUE;
}
  

Код работает нормально, однако представление, связанное с контроллером корневого представления, перекрывает строку состояния, чего я бы хотел избежать (см. Рисунок ниже).

введите описание изображения здесь

Как мне поступить? В частности, я хочу иметь светло-серый фон для строки состояния (аналогично приложениям, созданным с помощью раскадровки), а также корректно обрабатывать изменение ориентации.

Спасибо

Ответ №1:

Ну, вы можете сделать что-то вроде следующего:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = [[UIViewController alloc] init];
    self.window.rootViewController.view.backgroundColor = [UIColor whiteColor];
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0,
                                                               [UIApplication sharedApplication].statusBarFrame.size.height,
                                                               [UIScreen mainScreen].bounds.size.width,
                                                               [UIScreen mainScreen].bounds.size.height)];
    redView.backgroundColor = [UIColor redColor];
    [self.window.rootViewController.view addSubview:redView];

    [self.window makeKeyAndVisible];

    return TRUE;
}
  

должно выглядеть так:

введите описание изображения здесь