iOS 11 Navigation TitleView 错位

iOS 11 Navigation TitleView misplaced

我有一个 iOS 应用程序,我在其中设置自定义导航标题视图。

在 iOS 10 之前工作正常,但在 iOS 11 中,导航标题视图放错了地方。

这是 iOS 10 -

的屏幕截图

这是 iOS 11 -

的屏幕截图

正如您在屏幕截图中看到的那样,当我 运行 iOS 10 上的代码时,标题视图似乎没有问题。但是 iOS 11 上的相同代码将标题视图向下移动了一些像素并被剪切。

这就是我设置标题视图的方式 -

navigationItem.titleView = MY_CUSTOM_TITLE_VIEW

我尝试了很多东西并搜索了很多解决方案,但没有任何效果。

当您将自定义视图添加到标题视图时,iOS 的新导航栏出现问题。因此,您只需在实现导航栏自定义之前添加 "prefertsLargeTitles" is No & "largeTitleDisplayMode" is 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]];

希望对你有帮助^_^

修复方法如下 -

在自定义标题视图中添加此代码class -

override var intrinsicContentSize: CGSize {
    return UILayoutFittingExpandedSize
}

自定义标题视图显示在正确的位置。