Навигация по iOS 11 TitleView неуместна
У меня есть приложение для iOS, в котором я настраиваю пользовательский вид заголовка навигации.
До iOS 10 он работал нормально, но в iOS 11 представление заголовка навигации неуместно.
Вот скриншот для iOS 10 -
Вот скриншот для iOS 11 -
Как вы можете видеть на скриншотах, когда я запускаю код на iOS 10, вид заголовка выглядит нормально. Но тот же код на iOS 11 сдвигает заголовок вниз на несколько пикселей, и он обрезается.
Вот как я устанавливаю вид заголовка -
navigationItem.titleView = MY_CUSTOM_TITLE_VIEW
Я перепробовал много вещей и искал много решений, но ничего не помогало.
2 ответа
Вот как это можно исправить -
Добавьте этот код в пользовательский класс представления заголовка -
override var intrinsicContentSize: CGSize {
return UILayoutFittingExpandedSize
}
И пользовательский вид заголовка отображается в правильном положении.
Есть проблема с новой панелью навигации для iOS, когда вы добавляете пользовательский вид в заголовок. Таким образом, вы просто добавляете "предпочитает, чтобы значение" было "Нет", а "большое значение" - "DisplayModeNever" перед реализацией пользовательской панели навигации.
Вот мой код:
if (@available(iOS 11.0, *)) {
[[self navigationController] navigationBar].prefersLargeTitles = NO;
[[self navigationController] navigationItem].largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;
}
// Add contraints to titleView
NSLayoutConstraint *centerPrompt= [NSLayoutConstraint constraintWithItem:midPromptLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:midView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
NSLayoutConstraint *topPrompt= [NSLayoutConstraint constraintWithItem:midPromptLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:midView attribute:NSLayoutAttributeTop multiplier:1.0 constant:10];
NSLayoutConstraint *centerTitle= [NSLayoutConstraint constraintWithItem:midTitleLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:midView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
NSLayoutConstraint *topTitle= [NSLayoutConstraint constraintWithItem:midTitleLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:midPromptLabel attribute:NSLayoutAttributeTop multiplier:1.0 constant:10];
[midView addConstraints:@[centerPrompt,topPrompt,centerTitle,topTitle]];
Надеюсь, вам поможет ^_^