UINavigationBar隐藏返回button文本

如何隐藏UINavigation控制器的后退button文本? 我只会有“<”而不是“<Back”

在界面生成器中 ,您可以select前一个控制器的导航项,并将Back Buttonstring更改为您希望后退button显示为的forms。 如果你想把它留空白,例如,只需放一个空格。

也可以用这行代码来改变它

[self.navigationItem.backBarButtonItem setTitle:@"Title here"];

或者在Swift中

self.navigationItem.backBarButtonItem?.title = ""

你也可以通过故事板做到这一点。 在前一个控制器的导航项的属性检查器中,您可以在后退button字段中设置“”。 参考下面的图片。 将“您的标题在这里”replace为“”。 通过这样做,你会达到预期的结果。 你不需要再混淆“标题”了。

以编程方式,你可以使用

[self.navigationItem.backBarButtonItem setTitle:@" "];

自我指的是推动你想要的视图控制器的控制器。

Xcode视图控制器导航项目

示例之前,导航栏之后

之前 之前

后

你可以像这样实现UINavigationControllerDelegate:

 func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) { let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil) viewController.navigationItem.backBarButtonItem = item } 

backBarButtonItem默认为零,它影响下一个推动的控制器,所以你只需要为所有控制器设置它

解决这个问题的另一个解决scheme是在你有很多视图控制器的情况下,使用UIAppearance代理来有效地隐藏后退button标题文本,如下所示:

 UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]; [navBarButtonAppearance setTitleTextAttributes:@{ NSFontAttributeName: [UIFont systemFontOfSize:0.1], NSForegroundColorAttributeName: [UIColor clearColor] } forState:UIControlStateNormal]; 

此解决scheme将文本呈现为一个小小的清晰点,类似于手动将后退button标题设置为@" " ,除了它会影响所有导航栏button。

我不build议这是一个通用的解决scheme,因为它会影响所有的导航栏button。 它翻转范例,以便您select何时显示button标题,而不是何时隐藏标题。

要select何时显示标题,可以根据需要手动恢复标题文本属性,或创buildUIBarButtonItem的专用子类(可能与另一个UIAppearance代理)执行相同操作。

如果您有一个应用程序需要隐藏大多数后退button标题,并且只有less数(或没有)导航button是带有标题的系统button,则可能适合您!

(注意:为了确保长标题不会导致中心导航栏标题移动,即使文本颜色清晰也需要更改字体大小)

在viewDidLoad或loadView中添加下面的代码

 self.navigationController.navigationBar.topItem.title = @""; 

我使用iOS 9在iPhone和iPad上testing了它

将后退button的标题设置为@""nil将不起作用。 您需要将整个button设置为空(没有标题或图像):

Objective-C的

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];

迅速

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

这应该在导航堆栈中视图控制器顶部的视图控制器上完成(例如,通过pushViewController方法导航到VC的位置)

您可以添加这个Objective-C类别,使得由导航控制器创build的所有“返回”button都没有文本。 我只是把它添加到我的AppDelegate.m文件。

 @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]; } @end 

PS – (我不知道如何使这个扩展工作与斯威夫特,这是有奇怪的错误。编辑欢迎添加一个Swift版本)

目前的答案是行不通的。 我想完全删除标题 ,但“回”的文字并没有消失。

返回到前一个视图控制器并设置其标题属性:

 self.title = @" "; 

只有在以前的视图控制器没有标题时才起作用

以编程方式从后台删除文本,使用下面的代码这将工作formsxcode7及以上。

self.navigationController.navigationBar.topItem.title = @“”;

要么

在故事板中手动select视图控制器上的导航栏,然后在后退button文本中input“”。

这将工作。 谢谢

将前一个VC的标题设置为带空格的string。 和后退button的标题将被replace为单个空格string。

 Self.title = " " 

在后面按下再次在viewWillAppear重置标题为原来的。

唯一没有副作用的是创build一个自定义后退button。 只要您不提供自定义操作,即使滑动手势也能正常工作。

 extension UIViewController { func setupBackButton() { let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil) navigationItem.backBarButtonItem = customBackButton }} 

不幸的是,如果你想要所有的后面的button没有任何标题,你需要在所有的视图控制器中设置这个自定义后退button:/

 override func viewDidLoad() { super.viewDidLoad() setupBackButton() } 

将空格设置为标题而不是空string非常重要。

在Swift3中,

如果你设置全局设置

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // .. let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal) BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted) // ... } 

我在这篇文章中尝试了一切。 唯一的工作解决scheme是@ VoidLess的

这是相同的答案,但更完整

 class CustomNavigationController: UINavigationController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.delegate = self } } // MARK:UINavigationControllerDelegate extension CustomNavigationController { func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil) } } 

在iOS 11中,我们发现将UIBarButtonItem外观的文本字体/颜色设置为一个非常小的值或清除颜色会导致其他栏项消失(系统不再承认UIBarButton项的类,它会将其转换为_UIModernBarButton )。 在交互式popup窗口中,将背景文字的偏移设置为离屏也会导致闪烁。

所以我们swizzled addSubView

 + (void)load { if (@available(iOS 11, *)) { [NSClassFromString(@"_UIBackButtonContainerView") jr_swizzleMethod:@selector(addSubview:) withMethod:@selector(MyiOS11BackButtonNoTextTrick_addSubview:) error:nil]; } } - (void)MyiOS11BackButtonNoTextTrick_addSubview:(UIView *)view { view.alpha = 0; if ([view isKindOfClass:[UIButton class]]) { UIButton *button = (id)view; [button setTitle:@" " forState:UIControlStateNormal]; } [self MyiOS11BackButtonNoTextTrick_addSubview:view]; } 

使用覆盖pushViewController的自定义NavigationController

 class NavigationController: UINavigationController { override func pushViewController(_ viewController: UIViewController, animated: Bool) { viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) super.pushViewController(viewController, animated: animated) } } 

Swift 3.1你可以通过实现UINavigationController的委托方法来做到这一点。

`func navigationController(_ navigationController:UINavigationController,willShow viewController:UIViewController,animated:Bool){

/ **它只会隐藏标题后退button,**我们仍然会得到后退箭头图像和默认function。 * / let item = UIBarButtonItem(title:“”,style:.plain,target:nil,action:nil)viewController.navigationItem.backBarButtonItem = item}

这是我的决议iOS11,我改变UIBarButtonItem在applicationDidFinishLaunchingWithOptions: UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-100, 0), for:UIBarMetrics.default)你不能改变Y偏移,因为它会改变在iOS11中,后退button的位置也是如此,但是在iOS10及更低版本中是可以的。

Swift版本在全球范围内完美运行:

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal) UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted) return true } 

这是从我的xamarin.forms代码,类派生自NavigationRenderer

 NavigationBar.Items.FirstOrDefault().BackBarButtonItem = new UIBarButtonItem( "", UIBarButtonItemStyle.Plain, null);