UIBarButtonItem删除后退按钮标题-iOS 11
我使用上面的命令删除iOS 11之前的UIBarButtonItem删除后退按钮标题-iOS 11,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我使用上面的命令删除iOS 11之前的backButtonTitle。但在iOS 11上,这并不能正常工作。 箭头向下移动位。 如何解决这个问题 编辑:通过擦除标题的其他方法可以解决我的问题,但我关心的是为什么旧方法不再有效。另一种方法是为导航控制器设置UINavigationControllerDelegate,并在其功能中擦除标题 UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMak
backButtonTitle
。但在iOS 11上,这并不能正常工作。
箭头向下移动位。
如何解决这个问题
编辑:通过擦除标题的其他方法可以解决我的问题,但我关心的是为什么旧方法不再有效。另一种方法是为导航控制器设置
UINavigationControllerDelegate
,并在其功能中擦除标题
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
使用此代码
class NoBackButtonTitleNavigationDelegate: UINavigationControllerDelegate {
func navigationController(
_ navigationController: UINavigationController,
willShow viewController: UIViewController,
animated: Bool
) {
viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}
}
创建导航控制器类,如下所示。将此“CustomNavViewController”指定给情节提要中的UINavigationController
var newBackButton = UIBarButtonItem(image: UIImage(named: "back"), style: .plain, target: self, action: #selector(self.back))
navigationItem?.leftBarButtonItem = newBackButton
}
因此,无需在每个ViewController中执行此操作。
最后从AppDelegate类中删除下面的行(如果存在)
class CustomNavViewController: UINavigationController,UINavigationControllerDelegate
{
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func navigationController(
_ navigationController: UINavigationController,
willShow viewController: UIViewController,
animated: Bool
) {
viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}
您可以水平移动标题,而不是垂直移动标题。此外,如果标题很长,可以使其颜色透明。我觉得很好:
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
可能重复@Luzo我必须编辑每个VCs。我不想用那种方法来做它。@Nitesh您可以使用公共超类。或者您可以将
UINavigatonController
子类化,并在那里实现神奇的效果。即使你必须编辑每一个VC,它也会比你原来的黑客解决方案好。看这里,这一个要好得多:UIOffsetMake(-1000,0)是我见过的解决这个问题的最佳解决方案。它告诉我:键入'NoBackButtonTitleNavigationDelegate'不符合协议'NSObjectProtocol',然后它添加了许多方法stubsNico,您所要做的就是实现委托,例如:类ViewController:UIViewController,UINavigationControllerDelegate{override func viewDidLoad(){super.viewDidLoad()navigationController?.delegate=self}func navigationController(uNavigationController:UINavigationController,将显示viewController:UIViewController,动画:Bool){viewController.navigationItem.BackbarButtonim=UIBarButtonim(标题:,样式:。普通,目标:nil,操作:nil)}}这表明WorkleftBarButtonim和BackbarButtonim没有相同的填充
let barButtonItemAppearance = UIBarButtonItem.appearance()
barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)