UIViewController без NavigationBar, UIView перекрывается со строкой состояния

Я работаю над обновлением моего приложения для поддержки iOS7 , однако одно из моих представлений перекрывает строку состояния. Пожалуйста, обратитесь к моему изображению,

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

Apple рекомендует использовать, self.edgesForExtendedLayout = UIRectEdgeNone; чтобы избежать полноэкранного макета. однако это работает, когда у нас есть UIViewController в UINavigationController и навигационная UIViewController видна. В моем приложении я не использовал UINavigationController . может ли кто-нибудь помочь мне решить эту дублирующую проблему в UIViewController без NavigationBar.

Наконец я сам нашел ответ. Нам нужно компенсировать кадр в - (void) viewDidLayoutSubviews как, например, следовать,

 - (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if([self respondsToSelector:@selector(edgesForExtendedLayout)]) { CGRect frame = self.view.frame; frame.origin.y = 20; frame.size.height = frame.size.height - 20; self.view.frame = frame; } } 

Поскольку я устанавливаю метод frame в режиме - (void) viewDidLayoutSubviews , пользователь не увидит переход. Если мы компенсируем кадр в -(void) viewDidload , пользователь увидит переход. Надеюсь, это поможет кому-то.

Вы устанавливаете wantsFullScreenLayout = YES где-то на ViewController?

Просто смещайте свой вид в viewDidLoad:

 CGRect frame = self.view.frame; frame.y = 20; self.view.frame = frame; 

Я написал полное объяснение здесь: https://stackoverflow.com/a/18855464/1078579

Короткий ответ заключается в том, что нельзя предотвратить перекрытие строки состояния на вашем приложении на iOS 7. edgesForExtendedLayout влияет только на контроллеры дочерних представлений внутри UINavigationController или UITabBarController.

Вам нужно будет переместить содержимое вашего приложения в контейнер (0,20,320,548), если вы хотите сохранить макет стиля iOS 6.

Добавить следующий код в ViewDidLoad

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIRectEdgeNone; }