我有一个带有少量视图控制器的导航控制器 - 让我们称之为A
,B
,C
,其中每个控制器都会在导航流上调用另一个({1}是根,A
位于堆栈顶部)。每个导航栏都有相同的标题属性(C
),但titleTextAttributes
除外,它们具有不同的字体。我在C
()函数中更改了它:
viewDidLoad
当我从视图控制器C返回到B时,我设置了字体的先前值:
override func viewDidLoad() {
super.viewDidLoad()
primaryFont = navigationController?.navigationBar.titleTextAttributes?[NSAttributedStringKey.font] as? UIFont
if let font: UIFont = UIFont.get(size: .small, family: .systemFont, style: .regular) {
navigationController?.navigationBar.titleTextAttributes![NSAttributedStringKey.font] = font
}
}
上面的代码看起来很好,但实际上视图控制器override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if let font = primaryFont {
navigationController?.navigationBar.titleTextAttributes[NSAttributedStringKey.font] = font
}
}
的标题字体与B
相同(不应该发生)。当我回到C
时,它已经具有正确的字体(主要字体),之后当我再次访问A
时,它也具有正确的字体。
虽然调试所有字体值都是正确的,但似乎有一些UI刷新问题(?)
总结:我想仅为视图控制器B
更改标题字体而我无法实现它
你知道为什么会发生这种情况以及如何解决这个问题吗?
更新:当我在中间C
> B'
> A
> B
中添加另一个视图控制器B'
时。正确的字体位于C
和A
上。当我从B
B'
有错误