Да, я использовал раскадровку.

ный парень вЧто нового в видео Какао Touch WWDC сказал что новая панель навигации с большим заголовком будет волшебным образом подключаться к представлению прокрутки верхнего уровня базового контроллера представления и автоматически сворачиваться / разворачиваться при прокрутке вверх и вниз. (И под «магическим» он, вероятно, имел в виду, что они не смогли обезопасить эту функциональность в уже смущающемUINavigationController-UINavigationBar-UINavigationitem API-интерфейсы в удобной для использования форме, поэтому им пришлось прибегнуть к подключению к эвристически выбранному представлению прокрутки за кулисами)

Несмотря на то, что я был готов к тому, что этот «автоматический» развал / сгиб не сработает, если я отклонюсь от базовогоUINavigationController + UITableView/UICollectionView кажется, что даже в этом простейшем случае он не работает должным образом.

Вот что у меня есть:

A UITabBarController который содержитUINavigationController, который содержитUIViewController, который имеетUITableView как егоview, Нажатие на первую ячейку в таблице приведет к перемещению второго контроллера представления в стеке навигации:

Нет кода, только раскадровка.

Я проверил«Предпочитает большие названия» для панели навигации, чтобы активировать большие заголовки. Теперь, если я запускаю приложение и прокручиваю вверх / вниз в табличном представлении, панель навигации остается той же - большой - размер; это не разрушается:

Тем не менее, я обнаружил, что если я установил элемент навигации второго контроллера представления для использования маленькой панели навигации (путем установки«Большой заголовок» к стоимости"Никогда"), затем, если я открою эту страницу и вернусь назад, интерактивный коллапс волшебным образом начнет работать на первой странице:

Я что-то здесь упустил или эта функция не работает должным образом? Вот пример проекта, который я использую:https://github.com/tzahola/iOS-11-Large-Title-Navigation-Bar

И, кстати, я использую официально выпущенную iOS 11, а не бета-версии.

2017-09-23 Обновление: я отправил отчет об ошибке в Apple и открыл тикет на openradar.me:http://www.openradar.me/radar?id=5017601935671296

 Michael25 сент. 2017 г., 01:37
Я испытываю ту же самую вещь. Моя кишка говорит мне, что это ошибка
 Tamás Zahola25 сент. 2017 г., 09:19
@ Майкл, проверь мой ответ ниже!
 Michael25 сент. 2017 г., 15:06
@ TamásZahola спасибо. Я сделаю еще один снимок сегодня вечером
 Sergio Trejo26 нояб. 2017 г., 06:34
Наука я не могу комментировать Я поделюсь ответом, который я отправилstackoverflow.com/a/47493375/8385022

Ответы на вопрос(5)

override func viewDidLoad() {
    super.viewDidLoad()
    if #available(iOS 11.0, *) {
        self.navigationItem.largeTitleDisplayMode = .never
        self.navigationItem.largeTitleDisplayMode = .always
    }
}

Неважно, на каком языке!

Это связано с тем, что большие заголовки в элементе навигации решают, свернуть или нет, на основе поведения большого заголовка в предыдущем заголовке экранного элемента навигации.

 Arjen Hiemstra22 нояб. 2018 г., 14:42
Это добилось цели. Все остальные решения не сделали.
Решение Вопроса

что если я установлю"Большие названия" в"Никогда" на раскадровке, а затем установить его с помощью кода, тогда он работает:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
}

Похоже, Apple забыла обработать случай, когда элемент навигации имеет свойlargeTitleDisplayMode установить через Interface Builder.

Так что, пока они не решат эту проблему, оставьте"Большие названия" как"Никогда" на раскадровках, и установите их с помощью кода вviewDidLoad.

Вам просто нужно сделать это с первым контроллером представления. Последующие контроллеры представления учитывают значение в раскадровке.

 gklka03 окт. 2017 г., 16:36
Не могли бы вы уточнить, где я могу найти это "Большие заголовки" на раскадровках? Все, что я могу найти, это опция «Предпочитает большие заголовки» на панелях навигации. На каком контроллере вы вызываете приведенный выше фрагмент кода, в списке или на странице сведений?
 Tamás Zahola03 окт. 2017 г., 19:06
@gklka Вы должны выбрать элемент навигации на контроллере представления, содержащийся в контроллере навигации!
 Altimac30 окт. 2017 г., 10:04
Как объяснил @ TamásZahola. Этоочень важно добавить этот код (и отключить «Автоматически» / установить «Никогда» в IB) в самый первый (корневой?) контроллер представления, который будет загружен навигационным контроллером. Если вы сделаете это на последующих контроллерах представления, это не будет иметь никакого эффекта!

я поделюсь здесь ответом, который я отправил

https://stackoverflow.com/a/47493375/8385022

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

Пример, который НЕ будет работать Пример, который будет работать

https://markusbodner.com/2017/10/08/fix-large-navigation-bar-title-not-hiding-on-scroll-in-ios-11/

Я добавил в представлении willAppear:

        if #available(iOS 11.0, *) {
        navigationController?.navigationBar.prefersLargeTitles = true
    } else {
        // Fallback on earlier versions
    }
 vicente.fava17 мар. 2018 г., 04:01
 Yahya Alshaar12 дек. 2017 г., 17:20
Спасибо, это решает мою проблему, так что прокручиваемая область не минимизирует большой заголовок автоматически при прокрутке, так как это не первый вид, большое спасибо.

Ребята у меня была такая же проблема. Я смог решить эту проблему, добавив следующий фрагмент на мой первый View Controller of Navigation Controller

navigationController?.navigationBar.prefersLargeTitles = true
 satish30 янв. 2018 г., 19:57
Да, я использовал раскадровку.
 Sam Ballantyne06 янв. 2018 г., 18:28
Где? Вы используете раскадровки?

также убедитесь, что tableView находится в верхней части этого представления, прямо под Безопасной областью:

 DLee07 мар. 2019 г., 12:38
Спасибо! это помогло мне!

Ваш ответ на вопрос