推送弹出导航堆栈后 UIBarButtonItem 字体粗细发生变化

UIBarButtonItem font weight changes after push pop of navigation stack

我有一个 UIBarButtonItem,"Done" - 在故事板 IB 中为 ViewController A 创建。

ViewController A 是导航栈的根视图控制器。

如果我将视图控制器 B 推入导航堆栈,然后再次将其弹出。完成按钮的字体粗细发生变化。

A.viewWillAppear(..) 中应用了“完成”按钮的字体颜色,看起来很像

doneButton.tintColor = [CMPThemes navigationBarItemColour]; // it's a blue

在ViewController一个

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    ...
    self.navigationController?.pushViewController(vcB, animated: true)
    ...

中ViewController乙

viewDidLoad() {
    ...
    let backButton = UIBarButtonItem(image: UIImage(named: "arrowLeft"), style: .plain, target: self, action: #selector(goBack))
    backButton.tintColor = CMPThemes.popoverNavigationBarItemColour()
    self.navigationItem.leftBarButtonItem  = backButton
}

情节提要如下所示:(我在图像中添加了 A 和 B 以保持清晰度)。

如果有人发现了这个问题并能指出正确的方向进行修复,那就太好了!

我遇到了同样的问题。

我有后退按钮自定义图像,当我按下视图控制器并按下时,它会变粗(默认图像)

所以我在情节提要中所做的是将单个空白 space 应用到 后退按钮

第 1 步

--> 点击导航项

步骤 2

--> 把空白 space 放在后面的 Button

现在你可以观察到

导航项有一项空白

我发现了问题。应用的色调不是问题。我认为,最初当它从情节提要中加载完成按钮时,doneButton 样式等于 .done,后来当您弹出到 ViewControllerA 时,样式以某种方式更改为 .plan,所以我认为将样式设置在色调以下应该可以解决问题。

尝试使用以下代码更新 ViewControllerA 中的 viewWillAppear 方法:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    doneButton.tintColor = [CMPThemes navigationBarItemColour]; // it's a blue
    doneButton.style = .done
}

希望对您有所帮助!