UIView Обрезается строкой состояния до автозапуска

StackOverflow https://stackoverflow.com/questions/487150

  •  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:

http://blog.red-glasses.com/index.php/tutorials/iphone-auto-rotation-for-intermediate-developers-tutorial-1/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top