UIView Обрезается строкой состояния до автозапуска
-
20-08-2019 - |
Вопрос
Я создал приложение с несколькими видами, которое использует несколько контроллеров для отображения видов и управления ими.Проблема, с которой я сталкиваюсь, заключается в том, что когда симулятор изначально загружает представление, заголовок частично закрыт панелью в верхней части экрана, а панель инструментов в нижней части не касается нижней части экрана.Я использовал атрибуты размера Interface builder для управления видом при вращении iphone, и это работает отлично.Все идеально встает на свои места как в альбомном, так и в портретном режиме после поворота, но проблема заключается в начальной загрузке до того, как произойдет поворот.Ваши мысли очень ценятся.Тони
Решение
У меня были проблемы с ограничением просмотров по статусу, навигации и полосам вкладок.Я исправил большинство из них, используя функцию Simulated Metrics в Interface Builder.Таким образом, то, что вы размещаете в IB, намного точнее того, что вы на самом деле собираетесь получить.
Другие советы
Я боролся с этой проблемой много дней подряд - никакие манипуляции в IB не помогали.
В конечном счете я заставил это сработать, добавив эту строку:
mainViewController.view.frame = window.screen.applicationFrame;
к приложению:didFinishLaunchingWithOptions Завершил запуск с опциями:способ.(Где MainViewController является основным UIViewController).
Я тоже столкнулся с этой проблемой.В частности, при отображении ADBannerView
, весь мой вид сместился бы и оказался под строкой состояния, оставив немного пустого пространства размером как раз с строку состояния в нижней части экрана iPhone.Вот как я решил эту проблему : (Ответ Адама здесь помог мне разобраться в этом):
// In the function that displays an iAD Banner
CGRect contentFrame = self.view.bounds;
CGRect myStatusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGFloat statusHeight = myStatusBarFrame.size.height;
// Set the view's origin to be under the status bar.
contentFrame.origin.y = statusHeight;
Мне нужно было установить источник моего представления так, чтобы он находился ниже строки состояния, и это решило проблему для меня.
Проблема в том, что вы добавляете свой контроллер "неправильно" в соответствии с документами Apple (хотя, ИМХО, Apple разработала его плохо - по умолчанию должно быть указано, что вам не нужно переключаться!)
если у тебя будет строка состояния, Apple требует что вы "вручную" сдвигаете все свои контроллеры вниз на 20 пикселей (точнее, на высоту строки состояния - хотя сегодня это всегда 20 пикселей, Apple позволяет запрашивать высоту во время выполнения из свойства "statusBarFrame" в UIApplication).
Классы Apple - напримерUINavigationController / UITabBarController - автоматически сдвигаются вниз на 20 пикселей при добавлении на экран.У обоих классов есть ошибка, из-за которой они будут выполнять этот сдвиг даже если они не являются основным контроллером - поэтому ваше приложение внезапно сдвигается вниз еще на 20 пикселей, оставляя наверху 20 пикселей пустого пространства.
Но, когда они вращаются, эти классы часто "делают все правильно" и возвращаются на место.Или наоборот.
c.f.по этой ссылке вы найдете гораздо более подробное объяснение того, что происходит, и как написать свой код так, как этого хочет Apple: