Навигация по 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]];

Надеюсь, вам поможет ^_^

Другие вопросы по тегам