0

У меня есть экран в моем приложении с несколькими контроллерами детского вида. При меньших размерах экрана, таких как iPhone, контроллеры представлений размещаются на одном уровне друг с другом. На размерах экрана iPad один из контроллеров просмотра плавает поверх другого.Как проверить текущий класс размера для экрана из встроенного контроллера дочернего представления?

Я хочу сделать так, чтобы мой контроллер просмотра, который иногда плавает, имеет только радиус угла, когда он плавает. Поэтому я рассмотрел переопределение метода, такого как viewDidLoad или overrideTraitCollection(forChildViewController:), в контроллере моего дочернего представления, чтобы установить радиус угла его представления в зависимости от того, является ли его класс размера wRegular, hRegular, который предназначен для iPads в портретном или альбомном виде.

Однако контроллер дочернего представления, похоже, не имеет значений такого же размера, что и контроллер корневого представления, и перемещение вверх по иерархии parentViewController, похоже, не приводит меня к контроллеру представления, который имеет эти значения ,

Как получить доступ к текущему классу размера верхней части иерархии представлений из контроллера дочернего представления?

Редактировать: Я пробовал существующий ответ с использованием UIScreen, и он отлично работает, когда мое приложение является единственным видимым приложением. Однако это приводит к неправильному поведению, когда приложение запускается в режиме разделения экрана - он всегда возвращает Regular/Regular, даже если приложение является узким. Есть ли решение, которое предполагает получение класса размера только для той части экрана, в которой находится мое приложение?

+1

«Как получить доступ к текущему классу размера верхней части иерархии представлений с контроллера дочернего представления?» Спросите у экрана, что это за класс. – matt

+0

Вот и все. Благодаря! –

+0

Вот загружаемый примерный проект, который показывает вам, как изменить среду признаков для ребенка. https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p321overrideTraitCollection/OverrideTraitCollection/ViewController.swift Пример делает именно то, что вы описываете: ребенок ведет себя по-разному, когда коллекция признаков различна (настроено в раскадровке) – matt

ответ

1

Как это (это ток Swift 3):

let tc = UIScreen.main.traitCollection 

Теперь вы можете опрашивать вертикальный и горизонтальный класс по размерам tc.

+1

Хотя это вариант, но не рекомендуется, если вы поддерживаете многозадачность iPad. – tzuer

+0

@ user3049050 Итак, экран не даст правильного ответа для этого приложения, когда мы под iPad многозадачны? – matt

+0

Yep - traitCollection UIScreen возвращает регулярные изменения даже в многозадачности. Рекомендуем вместо этого выбрать контроллер View. – tzuer

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