iOS 11 中的后退按钮未正确对齐

Back button not aligned properly in iOS 11

我们开始使用 Xcode 8.3 进行我们的项目,直到 iOS 10 一切都很好,但是当我们 运行 我们在 iOS 11 中使用相同的应用程序时按钮未按预期对齐,如下图所示

但是 iOS 10 是正确对齐的

这就是我们得到的布局约束错误

(
"<NSLayoutConstraint:0x600000288200 _UIModernBarButton:0x7f7ef5c87f10.bottom == UILayoutGuide:0x6000005a0380'UIViewLayoutMarginsGuide'.bottom + 64.5   (active)>",
"<NSLayoutConstraint:0x600000287f30 V:[_UIModernBarButton:0x7f7ef5c87f10]-(>=0)-|   (active, names: '|':_UIButtonBarButton:0x7f7ef5c86e60 )>",
"<NSLayoutConstraint:0x600000282030 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x6000005a0380'UIViewLayoutMarginsGuide']-(16)-|   (active, names: '|':_UIButtonBarButton:0x7f7ef5c86e60 )>"

)

对我来说,这是因为我使用了下面的一些技巧来隐藏标题

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -1000), for: .default)

我们不应该那样做,它在 iOS 11 上不起作用,并且会触发很多像您一样的自动布局问题 post。因此,请检查后退按钮上是否有 appearance

如果你真的想隐藏后退按钮上的文字,你应该https://whosebug.com/a/46889050/1418457

UINavigationBar.appearance().backIndicatorImage = image.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorTransitionMaskImage = image.withRenderingMode(.alwaysOriginal)

    if #available(iOS 11, *) {
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
    } else {
        UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -60, vertical: -60), for: .default)
    }