Почему splitViewController: collapseSecondaryViewController: onPrimaryViewController: не вызывается на iPhone 6 Plus?

Я реализовал подкласс UISplitViewController в своем приложении для обоих: iPhone и iPad. Метод, упомянутый в заголовке, вызывается, когда я поворачиваю устройство с Landscape на Portrait ориентации. Это действительно хорошо работает, если я не запустил приложение на iPhone 6 Plus. Почему этот метод там не вызывается?

Что делать, чтобы этот метод заработал?

Когда я запускаю приложение на iPhone 6 Plus, все нормально в обеих ориентациях. Но проблема в том, когда я переворачиваю iPhone 6 Plus с Landscape на Portrait. Мой навигационный контроллер не будет работать должным образом.

Это то, что я имею в виду:

Портрет на iPhone 5s
введите описание изображения здесь

iPhone 5s Портрет при выборе местоположения

введите описание изображения здесь

iPhone 5s, альбомная ориентация с выбранным местоположением

введите описание изображения здесь

iPhone 5s при повороте из альбомной ориентации в вертикальную

введите описание изображения здесь

iPhone 6 Plus, портретная

введите описание изображения здесь

iPhone 6 Plus, портретная ориентация при выборе местоположения

введите описание изображения здесь

iPhone 6 Plus, горизонтальная ориентация с выбранным местоположением

введите описание изображения здесь

iPhone 6 Plus при повороте из горизонтальной в вертикальную this is a problem, потому что мой метод splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: не вызывается. UINavigationController на тот момент не работает. Когда я выбираю место, ничего не происходит.

введите описание изображения здесь

class PBOSplitViewController: UISplitViewController, UISplitViewControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()

        preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
        delegate = self
    }

    func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController!, ontoPrimaryViewController primaryViewController: UIViewController!) -> Bool {
        return false
    }
}

Я настраиваю свой SplitViewController в раскадровке.


person Bartłomiej Semańczyk    schedule 21.04.2015    source источник
comment
Я пытался заставить splitViewController вызвать этот метод, но это не помогло   -  person Bartłomiej Semańczyk    schedule 21.04.2015


Ответы (1)


iPhone 6+ имеет больший экран и в некотором смысле воспринимается как iPad. Контроллер с разделенным представлением на iPhone 6+ будет пытаться отображать как основную, так и детальную панели так же, как на iPad, если только приложение не находится в «Режиме масштабирования».

У NSHipster есть статья, объясняющая это более подробно: http://nshipster.com/uisplitviewcontroller/

person Nikola Lajic    schedule 21.04.2015
comment
Я до сих пор не знаю, как решить проблему. Можно ли сохранить такое же поведение на iPhone 6 Plus? - person Bartłomiej Semańczyk; 21.04.2015
comment
@ BartłomiejSemańczyk попробуйте принудительно настроить макет, который вы хотите, с помощью UISplitViewControllers preferredDisplayMode developer.apple.com/library/ios/documentation/UIKit/Reference/ - person Nikola Lajic; 21.04.2015
comment
Я тоже сделал это, но он все еще не работает должным образом. Я думаю, что это проблема с Zoomed Display Mode, как вы сказали, но в Simulator такой опции нет. - person Bartłomiej Semańczyk; 21.04.2015
comment
@ BartłomiejSemańczyk из вашего обновленного ответа и вашего комментария неясно, что не работает и чего ожидается. Пожалуйста, постарайтесь быть более конкретным. - person Nikola Lajic; 21.04.2015
comment
Обновил ответ скриншотами. Вы можете посмотреть? Спасибо. - person Bartłomiej Semańczyk; 21.04.2015
comment
@ BartłomiejSemańczyk по умолчанию контроллер разделения экрана будет отображать только горизонтальный вид на iPhone 6+ (и планшетах), и он останется в подробном виде после поворота в портретный режим. Так что я предполагаю, что это как-то связано с вашими настройками. Опубликуйте код, который вы используете для настройки и редактирования контроллера разделения представления. - person Nikola Lajic; 21.04.2015
comment
Давайте продолжим это обсуждение в чате. - person Bartłomiej Semańczyk; 21.04.2015