4

Я испытываю странную проблему с контроллерами с раздельными изображениями, и мне удалось очень легко воссоздать проблему в совершенно новом приложении. Если вы поворачиваете iPhone 6 Plus в ландшафт, главный и подробный контроллер просмотра становятся видимыми на экране, но если вы затем повернете назад к портрету и переместите вкладки, а затем поверните на пейзаж, контроллер подробного представления будет полностью серым, как будто ничего нет. Это регистрируется на консоли: <Error>: CGImageCreate: invalid image size: 0x0 Я хотел бы знать, знаете ли вы причину или что можно сделать, чтобы исправить эту ошибку.Поворот iPhone 6 Plus приводит к просмотру контроллера серых деталей?

Установка является UITabBarController с тремя вкладками, каждая вкладка по умолчанию UISplitViewController вытаскивали с помощью Interface Builder. Подкласс UISplitViewController и измените 3 разделенных представления на этот класс. Установите делегат контроллера разделенного представления на себя в viewDidLoad. Затем верните YES с splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:. Это устанавливает его так, что мастер остается видимым после поворота назад к портрету, а не по умолчанию.

Чтобы воспроизвести ошибку: Запустить приложение в портрете на iPhone 6 Plus, поворот в альбомный, повернуть назад к портрету, нажмите на вторую или третью вкладку, поворот в альбомную
Ошибки: Контроллера вида детали полностью серый
Ожидаемый: вид контроллер детали должен выглядеть, как он обычно делает, если вы запустите приложение, выберите другую вкладку, а затем повернуть на альбомную

Дополнительной информации: как только это происходит, если г оттуда вернитесь к портрету, а затем вернитесь на другую вкладку, и при повороте к пейзажу будет отображаться серый контроллер детали. Приложение должно быть принудительно завершено и перезаписано, чтобы увидеть эти разделенные виды в ландшафте.

Теперь я заметил, что если вы откроете приложение и отобразится первая вкладка, если вы поворачиваете iPhone 6 Plus в альбомную, то он фактически инициализирует каждый контроллер главного и подробного представления в контроллере панели вкладок (5 дополнительных контроллеров представлений) - он останавливается на контрольных точках, установленных в viewDidLoad, если вы подклассифицируете эти контроллеры. Я ожидал, что он только инициализирует контроллер подробных представлений для контроллера разделенного вида, который отображается на экране. Мне интересно, если это ожидаемое поведение? Я считаю, что это может быть связано с этой ошибкой.

Вопрос в том, является ли этот серый экран ошибкой в ​​iOS, или есть проблема с этой настройкой, или есть что-то, что можно сделать, чтобы это не произошло?

Как это должно появиться:
Screenshot of expected appearance

Как он появляется, когда после вышеуказанных шагов:
Screenshot of gray detail view controller bug

ответ

1

я столкнулся некоторые вещи странно себя, работая на моем Multiple Detail Views образце. На самом деле я получал 2 вида таблиц вместо 1 Table View и 1 Подробный вид в симуляторе 6+. Я мог бы исправить это, вернув контроллер подробного представления с separateSecondaryViewControllerFromPrimaryViewController методом SplitViewController delegate.

Моего кода выглядит так:

func splitViewController(splitViewController: UISplitViewController, separateSecondaryViewControllerFromPrimaryViewController primaryViewController: UIViewController!) -> UIViewController? { 
    if let primaryAsNavController = primaryViewController as? UINavigationController { 
     if let topAsTableViewController = primaryAsNavController.topViewController as? TableViewController2 { 
      //Return Navigation controller containing DetailView1 to be used as secondary view for Split View 
      return (UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("detail1Nav") as UIViewController) 
     } 
    } 
return nil 
} 

Для меня это происходит только тогда, когда TableView2 был TopViewController, поэтому я его проверка и если это правда я инициализация моего предназначенного DetailViewController и вернуть его.

Надеюсь, что этот подход будет работать и на вас.

+0

Это действительно решает проблему! Кажется, это ошибка в iOS, нет? Я подал вам отчет об ошибке, и вы тоже? – Joey

+0

Серый экран обозначает неинициализированный VC, поэтому нам нужно его инициализировать, и упомянутый метод казался правильным местом для этого. Однако то, что я испытывал, было немного другим, проверьте мой код, связанный с сообщением в блоге. Я фактически получал оба представления таблиц одновременно. Один в первичной, другой по вторичной. Не уверен, что это ошибка или нет. Дайте мне знать, если вы услышите от Apple. Также я был бы рад увидеть ваш код, если вы можете поделиться им и посмотреть, будет ли какой-либо другой подход лучше. –

Смежные вопросы