自定义后退指示图像和iOS 11

Luc*_*lla 22 ios ios11

我在我的应用程序中使用自定义后退按钮.此自定义后退按钮全局设置如下:

    UINavigationBar.appearance().backIndicatorImage = UIImage(named: "Back").withRenderingMode(.alwaysOriginal)
    UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(asset: .back).withRenderingMode(.alwaysOriginal)
Run Code Online (Sandbox Code Playgroud)

在iOS 11之前,这段代码可以解决问题,但现在在iOS 11中,按钮不再垂直居中,如您所见:

在此输入图像描述

我可以将后退按钮图像的高度更改为44,但这会在iOS <11中打破它.我也可以使用两个不同的图像,但我正在寻找更清洁的东西,就像在后面垂直居中图像一样按钮容器视图.

编辑:

事实证明,正如banxii1988所说,问题是由于setBackButtonTitlePositionAdjustment价值故意将标题移到可见屏幕之外.这是一个黑客,以避免删除每个视图控制器中的后退按钮标题.我决定删除这个黑客​​,我做了正确的事情是:

  1. 将故事板中的后退按钮项设置为" ".
  2. 在没有相关故事板的每个视图控制器中,我以backBarButtonItem编程方式 设置navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

请注意,您在视图控制器中看到的后退按钮标题是在导航堆栈中的上一个标题中设置的.

小智 12

我觉得这个方法还可以!这对我很有用.

if(@available(iOS 11, *)) {
    [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal];
    [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateHighlighted];

} else {
    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60) forBarMetrics:UIBarMetricsDefault];
}
Run Code Online (Sandbox Code Playgroud)


asa*_*nli 12

对于任何无法解决问题的人:

1)在你的项目中搜索(cmd + shift + f)"setBackButtonTitle",你会发现如下代码:

[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[xController class]]] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

2)用以下代码更改上面的代码:

[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[xController class]]] setBackButtonTitlePositionAdjustment:UIOffsetMake(-200, 0) forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

从iOS 11开始,上面的代码我们用来隐藏按钮标题,后退按钮和标题本身.但是,如果您只是水平移动后退按钮标题,一切正常,并且没有退回.


ban*_*988 10

1)删除PositionAdjustment,如果有的话.如

  bap.setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -64), for: .default)
Run Code Online (Sandbox Code Playgroud)

2)检查导航堆栈中的前一个ViewController是否具有标题


小智 5

此解决方案适用于iOS 9、10和11

    var backButtonImage: UIImage = UIImage(named: "backButton")!
    UINavigationBar.appearance().backIndicatorImage = backButtonImage
    UINavigationBar.appearance().backIndicatorTransitionMaskImage = backButtonImage

    if #available(iOS 11, *) {
        UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-300, 0), for:UIBarMetrics.default)
    } else {
        UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -200), for:UIBarMetrics.default)
    }
Run Code Online (Sandbox Code Playgroud)