2016-06-21 9 views
1

Я использую UISplitViewController в своем приложении. Это очень хорошо работает на iPad, где первичные и вторичные всегда видны, и он отлично работает на большинстве iPhone, где он действует как UINavigationController.UISplitViewController - предотвращает расщепление в ландшафте на iPhone 6 плюс

На iPhone 6+ и 6S + вид сплит действует как iPhone в портрете и как iPad в ландшафте. Это расщепление в ландшафте вызывает у меня проблемы, и я хотел бы избежать этого.

Есть ли способ предотвратить отображение UISplitViewController первичных и вторичных контроллеров в ландшафте iPhone 6+? Я просто хочу, чтобы он показывал вторичный контроллер, как и для других iPhone.

Спасибо.

ответ

1

Я смог сделать это, подклассифицировав UISplitViewController, а затем переопределив коллекцию признаков, чтобы вернуть компактный класс горизонтального размера, когда устройство не является iPad. Я знаю, что проверка идиомы интерфейса в последнее время является безумной, но я не знал, как это сделать.

Я просто добавил этот метод к моему UISplitViewController подкласса:

-(UITraitCollection *)traitCollection { 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     return [super traitCollection]; 
    } else { 
     return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; 
    } 
} 

Любые предложения для лучшего способа сделать это, безусловно, приветствуется.

+0

Что быстры эквивалентный метод для этого? Я мог найти только «overrideTraitCollectionForChildViewController» – nravichan

+0

Кажется, это отрывочное решение. Это переопределение требуемого свойства, объявленного в протоколе UITraitEnvironment, который реализуется UIViewController. Это в основном переопределяет метод «getter» для свойства traitCollection. Не уверен, как вы делаете такие вещи в Свифте. – TylerJames

+0

Я попытался переопределить его и, похоже, не работал. – nravichan

0

Вот тот же ответ на Swift, но и с исправлением, где вертикальный размер класса было бы неправильно по телефону в ландшафте:

override var traitCollection: UITraitCollection { 
    if UI_USER_INTERFACE_IDIOM() == .pad { 
      return super.traitCollection 
    } else { 
     let horizontal = UITraitCollection(horizontalSizeClass: .compact) 
     let vertical = UITraitCollection(verticalSizeClass: super.traitCollection.verticalSizeClass) 
     return UITraitCollection.init(traitsFrom: [horizontal, vertical]) 
    } 
}