UINavigationController后退按钮在iOS 11上不隐藏标题

时间:2017-06-29 01:41:22

标签: uinavigationcontroller uinavigationitem ios11

我昨天将我的设备更新为iOS 11 Beta,我的应用程序在AppDelegate中使用此代码在所有屏幕上隐藏了后退按钮标题:

@implementation UINavigationItem (Customization)

/**
 Removes text from all default back buttons so only the arrow or custom image shows up.
 */
-(UIBarButtonItem *)backBarButtonItem
{
    return [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}

它在旧版本上正常运行,但是当我在iOS 11 Beta上运行我的应用程序时,后退按钮的标题仍然显示。 有人面对这个问题吗?它是iOS或iOS 11的测试版bug需要另一种隐藏后退按钮标题的方法吗?

4 个答案:

答案 0 :(得分:6)

我以前一直在使用您的方法,但遗憾的是它已不再使用了。在尝试了所有可能的解决方案后,这是我发现的唯一没有任何问题和错误的工作。请注意,对于所有UIViewControllers而言似乎没有更普遍的方法来解决这个问题。

  1. 呼叫

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];
    
  2. 在呈现控制器的viewWillDisappear上。

    1. 呼叫

      self.title = @"Title"
      
    2. 在呈现控制器的viewWillAppear上。

      我尝试过的其他解决方案存在各种问题,例如:它们工作正常,但是当你从左边缘稍微滑动时,一切都会破裂。

答案 1 :(得分:2)

我在iOS 11中所做的只是为我的根导航控制器实现UINavigationControllerDelegate协议,并在每次显示新控制器时将“空白”UIBarButtonItem设置为后退按钮。这是Swift 4版本:

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

答案 2 :(得分:0)

将条形按钮标题文字颜色设置为清除是我发现申请所有屏幕的最简洁方法

 UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
 UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)

答案 3 :(得分:0)

FOR SWIFT 3 +

使用以下代码支持iOS 9到11

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