UIBarButtonItem删除后退按钮标题-iOS 11

UIBarButtonItem删除后退按钮标题-iOS 11,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我使用上面的命令删除iOS 11之前的backButtonTitle。但在iOS 11上,这并不能正常工作。 箭头向下移动位。 如何解决这个问题 编辑:通过擦除标题的其他方法可以解决我的问题,但我关心的是为什么旧方法不再有效。另一种方法是为导航控制器设置UINavigationControllerDelegate,并在其功能中擦除标题 UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMak

我使用上面的命令删除iOS 11之前的
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)