UINavigationBar隐藏返回button文本
如何隐藏UINavigation控制器的后退button文本? 我只会有“<”而不是“<Back”
在界面生成器中 ,您可以select前一个控制器的导航项,并将Back Button
string更改为您希望后退button显示为的forms。 如果你想把它留空白,例如,只需放一个空格。
你也可以用这行代码来改变它 :
[self.navigationItem.backBarButtonItem setTitle:@"Title here"];
或者在Swift中 :
self.navigationItem.backBarButtonItem?.title = ""
你也可以通过故事板做到这一点。 在前一个控制器的导航项的属性检查器中,您可以在后退button字段中设置“”。 参考下面的图片。 将“您的标题在这里”replace为“”。 通过这样做,你会达到预期的结果。 你不需要再混淆“标题”了。
以编程方式,你可以使用
[self.navigationItem.backBarButtonItem setTitle:@" "];
自我指的是推动你想要的视图控制器的控制器。
示例之前,导航栏之后
之前
后
你可以像这样实现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);