如何删除所有导航栏后退button标题
当我推UIViewController
,它在新的UIViewController
后退button中有一些标题,如果标题有很多文字,它在iPhone 4s中看起来不太好所以我想删除它。
如果我在prepareForSegue
函数中添加一些代码,这将是一个麻烦。
有什么更好的方法来实现这个?
如果你想把后面的箭头代码放到AppDelegate
文件中,进入didFinishLaunchingWithOptions
方法。
For Objective-C
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
For Swift
let BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
下面的另一个选项。
在Objective C
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
在Swift
self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)
所以可能是你的问题已经解决了。
快乐的编码。
我在AppDelegate
文件中使用这行代码到didFinishLaunchingWithOptions
方法来删除后退title
。
Swift 2.x
let barAppearace = UIBarButtonItem.appearance() barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)
Swift 3.x
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
工作就像Swift 3上的魅力一样
self.navigationController?.navigationBar.topItem?.title = " "
你可以使用xcode 8和swift 3.0
self.navigationController?.navigationBar.backItem?.title = " "
let barAppearace = UIBarButtonItem.appearance() barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
在swift 3.0中使用这行代码
我通常添加或更改UIViewController的viewDidLoad中的后退button。
像这样的东西应该工作:
let leftButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "closeView:") self.navigationItem.leftBarButtonItem = leftButton
不要忘记改变和实现它被称为closures视图的function。
更容易,只需更改标题:
self.navigationItem.leftBarButtonItem.title = "Back"
从rordulu的回答中得到灵感,我最终创build了一个自定义的UINavigationController和UINavigation栏,它似乎处理这个棘手问题的所有情况。
1)用你自定义的UINavigationBar
初始化新的UINavigationBar
:
class CustomNavigationController: UINavigationController { convenience init() { self.init(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil) } }
2)将导航栏的backItem.title
属性设置为一个空string,每次视图展现出来
class CustomNavigationBar: UINavigationBar { override func layoutSubviews() { backItem?.title = "" super.layoutSubviews() } }
现在,每当您使用此导航控制器和栏组合,它将永远不会有后退button文本! 🎉
注意:如果还使用故事板,这应该可以正常工作,只要确保将自定义导航栏组件放到视图中即可
你可以为所有需要这个行为的UIViewController
和子类的viewDidLoad
创build一个子类:
override func viewDidLoad() { super.viewDidLoad() self.navigationItem.backBarButtonItem = UIBarButtonItem( title: "", style: .plain, target: nil, action: nil) }
这样,你可以select你想要的行为控制器,而不需要重复代码。 我更喜欢我的控制器只是说“返回”,而不是以前的控制器的标题,所以我在这里设置了标题。
Swift 3:
self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)
只需要从您的其他ViewController所依赖的位置转到您的Parent ViewController 。
override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(true) navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)}
很简单。 在后退button的标题中放置一个空格并准备就绪。 请记住,它必须在以前的视图中,您要删除文本。
我不知道为什么,但我发现问题隐藏在iPhone加号button标题,但在设备没有加显示正确与
leftBarButtonItem.title = ""
所以我find了简单的方法。 在自动布局的NavigationViewController的NavigationBar中设置为淡色。 如果使用带有色调的图标或文本块,则可能会出现问题。 但在我的情况下,我不使用它的一切。
我不满意setBackButtonTitlePositionAdjustment
解决scheme,所以这是一个快捷的方法来隐藏整个应用程序中的所有后退button文本:
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: barbuttonFont, NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal) UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: barbuttonFont, NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)
你将不得不从AppDelegate
的didFinishLaunchingWithOptions
函数中调用这些函数。
必须将外观设置为.Highlighted
状态以避免用户点击后退button时显示文本。