如何隐藏UINavigation Controller的返回按钮文字?只想要"<"而不要"< Back"。
如何隐藏UINavigation Controller的返回按钮文字?只想要"<"而不要"< Back"。
您可以这样实现UINavigationControllerDelegate
:
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
viewController.navigationItem.backBarButtonItem = item
}
class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
let item = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
viewController.navigationItem.backBarButtonItem = item
}
}
backBarButtonItem
默认为 nil
,它影响下一个被推出的控制器,因此只需为所有控制器设置即可。
将返回按钮标题设置为@""
或nil
是不起作用的。您需要将整个按钮设置为空(没有标题或图像):
[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 的位置)。
self.navigationController.navigationBar.topItem.title = @"";
我在iOS 9的iPhone和iPad上进行了测试。
如果您有大量视图控制器并且想要解决这个问题,另一个解决方法是使用UIAppearance
代理来有效地隐藏返回按钮标题文本,如下所示:
UIAppearance
代理来有效地隐藏返回按钮标题文本,例如:UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];
[navBarButtonAppearance setTitleTextAttributes:@{
NSFontAttributeName: [UIFont systemFontOfSize:0.1],
NSForegroundColorAttributeName: [UIColor clearColor] }
forState:UIControlStateNormal];
这种解决方案将文本呈现为微小的透明点,类似于手动将返回按钮标题设置为@" "
,但它会影响所有导航栏按钮。
我不建议将此作为问题的通用解决方案,因为它会影响所有导航栏按钮。它改变了范例,你需要选择何时显示按钮标题而不是何时隐藏标题。
要选择何时显示标题,请手动根据需要恢复标题文本属性或创建一个专门的UIBarButtonItem
子类来执行相同操作(可能还需要另一个UIAppearance
代理)。
如果您有一个应用程序,其中大多数返回按钮标题都需要隐藏,并且只有少数(或没有)导航按钮是带有标题的系统按钮,则可以尝试使用此方法!
(注意:即使文本颜色是透明的,也需要更改字体大小以确保长标题不会导致中心导航栏标题向右移动)
我尝试过一些以上和以下的方法,但它们都不起作用。这个对我来说有效:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.topItem?.title = ""
}
您可以添加此 Objective-C 类别,使导航控制器创建的所有“返回”按钮都没有文本。我刚刚将其添加到我的 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一起使用,因为它会出现奇怪的错误。欢迎编辑添加Swift版本)
唯一没有副作用的方法是创建一个自定义返回按钮。只要您不提供自定义操作,连滑动手势也可以使用。
extension UIViewController {
func setupBackButton() {
let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = customBackButton
}}
很不幸,如果您希望所有返回按钮都没有任何标题,则需要在所有视图控制器中设置此自定义返回按钮 :/
override func viewDidLoad() {
super.viewDidLoad()
setupBackButton()
}
你需要将标题设置为空格而不是空字符串,这非常重要。
目前的答案不起作用。我想要完全删除标题,但是文字“back”仍然存在。
返回到上一个视图控制器并设置其标题属性:
self.title = @" ";
只有在前一个视图控制器没有标题的情况下才有效
@""
。 - Zev Eisenberg