Intereting Posts
Связывание статической библиотеки iOS с Xamarin.iOS и использование dll WKWebView: загрузка содержимого из папки документов в iOS Загрузка UIWebview при нажатии UIButton DeepEnd (cydia tweak), как 3D-фон для iOS Swift: Самый простой способ засеять модель данных основных данных iOS Framework, который может поддерживать iOS7 ios Coredata большой набор вставки Невозможно разрешить модуль реагировать – native – React Native 0.38.0 Оптимизируйте изображение, выбранное из рулона камеры, чтобы уменьшить размер файла Шифрование NSString AES256EncryptWithKey и AES256DecryptWithKey для ios Получение ошибки: Тип 'String' не имеет члена 'foregroundColor' в Swift 4 При загрузке идентификатора видео сбой при загрузке модуля YouTubePlayer импортированный профиль не содержит идентификаторов * ошибка при отправке приложения iOS в Apple Получать данные UITextView в пользовательской ячейке в swift Введите 'NSNotification.Name?' не имеет члена 'firInstanceIDTokenRefresh'

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