2016-03-30 4 views
4

Я пытаюсь создать приложение, поддерживающее ориентацию портрета и ландшафта для устройств iOS с обычным горизонтальным размером, а портрет - только для остальных.Поддержка ландшафтной ориентации для горизонтальногоSizeClass = .Regular в iOS

На момент написания этой статьи это было бы: только портрет (для iPhone, кроме 6 Plus/6s Plus) и Portrait AND Landscape для iPhone 6 Plus/6s Plus и iPad.

Это похожее поведение, выполняемое приложением native Mail.

Я пытался среди прочего, следующее:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 

    return [.Portrait, .LandscapeLeft, .LandscapeRight] 

} 

override func shouldAutorotate() -> Bool { 

    return (traitCollection.horizontalSizeClass == .Regular) 

} 

Однако shouldAutororate, очевидно, вызывается до интерфейса вращается, так что происходит перед traitCollection обновляется.

Итак, вопрос в том, как достичь этого? Я пытаюсь выполнить это самым чистым способом без прямого указания userInterfaceIdiom, размера экрана и т. Д.

+0

Вы когда-нибудь находили решение для этого? Я тоже заинтересован в этом! – Whakkee

ответ

2
override var supportedInterfaceOrientations:UIInterfaceOrientationMask{ 

    return [.portrait, .landscapeLeft, .landscapeRight] 

} 

override var shouldAutorotate:Bool { 

    return (traitCollection.horizontalSizeClass == .regular) || (traitCollection.displayScale > 2); 

} 
+0

Отличное решение! Моя первая идея была «но« traitCollection »еще не обновляется ...», но «traitCollection» в портрете в сочетании с 'displayScale' действительно дает нам необходимую нам информацию! – Whakkee

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