Nil*_*ils 94 uinavigationcontroller ios
如何从UINavigation控制器隐藏后退按钮文本?我只会有"<"而不是"<Back"
reb*_*o95 99
在界面构建器中,您可以选择上一个控制器的导航项,并将Back Button字符串更改为您希望后退按钮显示的位置.例如,如果你想把它留空,只需要放一个空格.
您也可以使用以下代码更改它:
[self.navigationItem.backBarButtonItem setTitle:@"Title here"];
或者在Swift中:
self.navigationItem.backBarButtonItem?.title = ""
Sha*_* KS 80
你也可以通过故事板来做到这一点.在上一个控制器的导航项的属性检查器中,您可以在后退按钮字段中设置"".请参阅下面的图片 将"您的标题"替换为"".通过这样做,您将获得所需的结果.你不需要再乱用'Title'了.
以编程方式你可以使用
[self.navigationItem.backBarButtonItem setTitle:@" "];
其中自我指推你需要的视图控制器控制器.

示例之前,导航栏之后
之前

后

小智 69
您可以像这样实现UINavigationControllerDelegate:
老SWIFT
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
viewController.navigationItem.backBarButtonItem = item
}
Run Code Online (Sandbox Code Playgroud)
SWIFT 4.x
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
}
}
Run Code Online (Sandbox Code Playgroud)
}
backBarButtonItem默认为nil,它会影响下一个推送的控制器,所以你只需为所有控制器设置它
jac*_*kal 41
将后退按钮的标题设置为@""或nil不起作用.您需要将整个按钮设置为空(没有标题或图像):
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];
Run Code Online (Sandbox Code Playgroud)
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
Run Code Online (Sandbox Code Playgroud)
这应该在视图控制器上完成,该视图控制器位于导航堆栈中的视图控制器之上(即通过pushViewController方法导航到VC的位置)
Ada*_*lan 29
对于具有大量视图控制器的情况,此问题的另一个解决方案是使用UIAppearance代理有效地隐藏后退按钮标题文本,如下所示:
UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];
[navBarButtonAppearance setTitleTextAttributes:@{
NSFontAttributeName: [UIFont systemFontOfSize:0.1],
NSForegroundColorAttributeName: [UIColor clearColor] }
forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
此解决方案将文本渲染为一个小的清晰点,类似于手动设置后退按钮标题@" ",除了它影响所有导航栏按钮.
我不建议将此作为该问题的一般解决方案,因为它会影响所有导航栏按钮.它会翻转范例,以便您选择何时显示按钮标题,而不是何时隐藏标题.
要选择何时显示标题,可以根据需要手动恢复标题文本属性,或者创建UIBarButtonItem相同的子类(可能与另一个UIAppearance代理).
如果您有一个应用程序,其中大多数后退按钮标题需要隐藏,并且只有少数(或没有)导航按钮是带标题的系统按钮,这可能适合您!
(注意:即使文本颜色清晰,也需要更改字体大小,以确保长标题不会导致中心导航栏标题转换)
alo*_*nes 29
在viewDidLoad或loadView中添加以下代码
self.navigationController.navigationBar.topItem.title = @"";
Run Code Online (Sandbox Code Playgroud)
我用iOS 9在iPhone和iPad上测试过
ter*_*dyl 15
您可以添加此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
Run Code Online (Sandbox Code Playgroud)
PS - (我不知道如何使这个扩展工作与Swift,它有奇怪的错误.编辑欢迎添加一个Swift版本)
小智 9
以编程方式从后退按钮中删除文本,在代码下面使用,这将工作从xcode7及以上.
self.navigationController.navigationBar.topItem.title = @"";
要么
manualLy在故事板中,选择视图控制器上的导航栏,并在后面的按钮文本中放入"".
这会奏效.谢谢
小智 9
唯一没有副作用的是创建自定义后退按钮.只要您不提供自定义操作,即使幻灯片手势也能正常工作.
extension UIViewController {
func setupBackButton() {
let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = customBackButton
}}
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果你想要的所有后退按钮都没有任何标题,你需要在所有视图控制器中设置这个自定义后退按钮:/
override func viewDidLoad() {
super.viewDidLoad()
setupBackButton()
}
Run Code Online (Sandbox Code Playgroud)
将空格设置为标题而非空字符串非常重要.
目前的答案没有奏效.我想完全删除标题,但文本"返回"并没有消失.
返回上一个视图控制器并设置其title属性:
self.title = @" ";
Run Code Online (Sandbox Code Playgroud)
仅当前一个视图控制器没有标题时才有效
我在上面和下面尝试了一些,但是它们没有用。这为我工作:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.topItem?.title = ""
}
Run Code Online (Sandbox Code Playgroud)
小智 7
雨燕5
viewController.navigationItem.backButtonDisplayMode = .minimal
Run Code Online (Sandbox Code Playgroud)
这里大多数解决方案的问题是,在后退项目上设置空文本与长按后退按钮的新功能不能很好地配合。它没有显示正确的标题,而是仅显示一个空列表
相反,您可以使用iOS14 的新按钮显示模式或依靠iOS13 的新外观 API将文本大小设置为 0。请注意,有些人正在使用颜色(透明),这也效果不佳,因为它使用了空间并将其从标题中删除。如果标题足够长,您会看到它被剪裁
结果代码:
public extension UINavigationBar {
func fixAppearance() {
if #available(iOS 14.0, *) {
topItem?.backButtonDisplayMode = .minimal
} else if #available(iOS 13.0, *) {
let newAppearance = standardAppearance.copy()
newAppearance.backButtonAppearance.normal.titleTextAttributes = [
.foregroundColor: UIColor.clear,
.font: UIFont.systemFont(ofSize: 0)
]
standardAppearance = newAppearance
} else {
topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您只需要在呈现视图控制器时调用该方法,因此要么从基类(viewWillAppear例如 on)调用它,要么向导航控制器添加一些委托,就像本文的其他答案中一样。
小智 5
替代方法 - 使用自定义 NavigationBar 类。
class NavigationBar: UINavigationBar {
var hideBackItem = true
private let emptyTitle = ""
override func layoutSubviews() {
if let `topItem` = topItem,
topItem.backBarButtonItem?.title != emptyTitle,
hideBackItem {
topItem.backBarButtonItem = UIBarButtonItem(title: emptyTitle, style: .plain, target: nil, action: nil)
}
super.layoutSubviews()
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,这将删除整个项目的标题。只需为 UINavigationController 设置自定义类。
已经有很多答案了,这是我在这个主题上的两分钱。我发现这种方法非常可靠。你只需要在 segue 之前把它放在 viewController 中。
斯威夫特 4:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92463 次 |
| 最近记录: |