2016-08-23 5 views
0

У меня есть приложение для iPhone, и я пытаюсь сделать его универсальным.Задняя кнопка мигает на UISplitViewController -> detail segue

Я добавил контроллер разделенного вида, и его главные и детализированные VC встроены в навигационные контроллеры, поэтому панель навигации будет отображаться одновременно, когда они будут видны одновременно, и я могу добавить, что displayModeButtonItem() и все.

Проблема заключается в том, что на iPhone, когда видна только одна из VC, дополнительный контроллер навигации, в который встроена деталь VC, приведет к тому, что кнопка «Назад» начнет мигать на экране подробно ,

Разница тонкая, но это действительно меня беспокоит.

Вот как она идет без дополнительный контроллер навигации: Without navigation controller

А вот как она идет с дополнительный контроллер навигации: With navigation controller

В гифы это не выглядит, как как в реальном iPhone, но вы можете видеть разницу. Похоже, что с дополнительным контроллером навигации появляется обратная стрелка сама по себе, а затем появляется надпись «Чтение». С другой стороны, без дополнительного навигационного контроллера появляется обратная стрелка и ярлык «Чтение» (обратите внимание, вы увидите это, ха-ха).

Чтобы обойти это, я попытался изменить сег, чтобы затем, когда вы нажимаете на строку таблицы в главном VC, я бы пошел прямо к фактической детали VC, минуя ее навигационный контроллер. Сначала это работало, но это привело к другим проблемам. Например, если бы я был на iPad, и я нажал другие VC на вершине детали VC, а затем постучал по другой строке на главном VC, деталь VC не вернулась бы к своему корневому VC, даже когда я прямо сказал об этом в didSelectRowAtIndexPath.

Так что я делаю что-то неправильно здесь, или это просто UISplitViewController quirk? Кто-нибудь знает, как исправить или обойти это?

Спасибо!

ответ

2

Хорошо, я понял.

Я имел это в моей детали ВК viewDidLoad когда проблема происходит:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
    self.navigationItem.leftItemsSupplementBackButton = true 
} 

И я заметил, что проблема была вызвана установкой leftBarButtonItem. Поэтому я изменил его на это, и теперь он отлично работает:

override func viewDidLoad() { 
    super.viewDidLoad() 
    if self.splitViewController?.collapsed == false { 
     self.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
     self.navigationItem.leftItemsSupplementBackButton = true 
    } 
}