Я перехожу к презентациям на основе UIPresentationController
для своих контроллеров представлений, но столкнулся с некоторой путаницей с API.
У меня есть специальная презентация контроллера стиля в стиле боковой панели (похожая на демонстрационный код LookInside
WWDC 2014).
Этот кластер классов (UIPresentationController
, UIViewControllerTransitioningDelegate
и UIViewControllerAnimatedTransitioning
) представляет собой контроллер вида как боковую панель от края экрана на представлениях класса обычного размера и представляет тот же контроллер вида, что и полный экран на компактном размер класса.
Тестирование этого на цели Resizable iPad показывает правильное поведение: я устанавливаю класс горизонтального размера в "Compact", а мой контроллер просмотра переключается с боковой панели на полный экран.
Однако я хочу больше детализации. Я хотел бы использовать презентацию диспетчера представлений в стиле боковой панели на iPhone 6 и 6+, когда устройство находится в альбомной ориентации, и использовать полноэкранную презентацию стиля для всех iPhone в портретной ориентации.
Итак, в моем методе
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
Я реализовал некоторую логику, чтобы определить, будет ли боковая панель занимать слишком много экрана, допустим, я использую следующее условие:
//If my sidebar is going to occupy more than half the new width of the view...
if( self.sidebarTransitionController.width > size.width / 2.0 )
{
//Override the presentation controller trait collection with Compact horizontal size class
sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
}
else
{
//Otherwise override the trait collection with Regular
sidebarPresentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
}
Однако это ничего не делает. В документации для UIPresentationController.overrideTraitCollection
указано:
Используйте это свойство, чтобы указать какие-либо черты, которые вы хотите применить к представленным и представленным контроллерам представлений. Указанные вами черты переопределяют любые существующие в настоящее время свойства для контроллеров представления. Значение по умолчанию этого свойства равно nil.
Присвоение нового значения этому свойству заставляет контроллер представления перейти к новому набору признаков, что может привести к анимации к представленному интерфейсу.
Назначение нового значения контроллеру презентации не приводит к изменению моего отображаемого интерфейса. (Даже если я назначаю overrideTraitCollection
, когда UIPresentationController
создается из объекта UIViewControllerTransitioningDelegate
.)
Что мне не хватает? Возможно ли выполнить адаптивное представление с UIPresentationController
на более гранулированном уровне?