不同的UINavigationControllers之间外观不同

9
在iOS 11中,我目前正在更改我的导航控制器的返回按钮,代码如下:
UINavigationBar.appearance().backIndicatorImage = whiteBackButtonImage!.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorTransitionMaskImage = whiteBackButtonImage!.withRenderingMode(.alwaysOriginal)

这似乎可以正常工作,但问题在于当我想要区分两种使用不同返回图片的UINavigationController时:

let whiteNavigationBarAppearance = UINavigationBar.appearance(whenContainedInInstancesOf: [WhiteNavigationController.self])
whiteNavigationBarAppearance.backIndicatorImage = greenBackButtonImage!.withRenderingMode(.alwaysOriginal)
whiteNavigationBarAppearance.backIndicatorTransitionMaskImage = greenBackButtonImage!.withRenderingMode(.alwaysOriginal)

let greenNavigationBarAppearance = UINavigationBar.appearance(whenContainedInInstancesOf: [GreenNavigationController.self])
greenNavigationBarAppearance.backIndicatorImage = whiteBackButtonImage!.withRenderingMode(.alwaysOriginal)
greenNavigationBarAppearance.backIndicatorTransitionMaskImage = whiteBackButtonImage!.withRenderingMode(.alwaysOriginal)

采用第二种方法时,常规的返回按钮会显示出来,但它似乎无法识别更改。有人知道我的方法错在哪里吗?


你使用故事板吗?你为导航控制器分配了适当的类吗? - Kamil Szostakowski
不,我是通过编程创建导航控制器的。 - tonik12
1个回答

3
我已经在副项目中重建了您的场景,您提供的代码片段运作良好。我认为可能是您的视图控制器层次结构出了问题。
这就是我的层次结构构建方式。`ViewController` 有一个按钮,可以将另一个 `UIViewController` 推送到导航栈中。
let redViewController = ViewController()
redViewController.view.backgroundColor = .red

let greenViewController = ViewController()
greenViewController.view.backgroundColor = .green

let red = RedNavigationController(rootViewController: redViewController)
red.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 1)

let green = GreenNavigationController(rootViewController: greenViewController)
green.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 2)

let tabBarController = UITabBarController()
tabBarController.setViewControllers([red, green], animated: false)
tabBarController.selectedIndex = 0

这是我设置外观的方式。
let image1 = UIImage(named: "Button")!.withRenderingMode(.alwaysOriginal)
let image2 = UIImage(named: "Button2")!.withRenderingMode(.alwaysOriginal)

let red = UINavigationBar.appearance(whenContainedInInstancesOf: [RedNavigationController.self])
red.backIndicatorImage = image1
red.backIndicatorTransitionMaskImage = image1

let green = UINavigationBar.appearance(whenContainedInInstancesOf: [GreenNavigationController.self])
green.backIndicatorImage = image2
green.backIndicatorTransitionMaskImage = image2

这是结果:

输入图像描述 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接