ios swift: 跨不同 VC 更改导航栏标题字体时滞后

ios swift: lag when changing navigationbar title font across different VCs

在 VC 之间切换导航栏标题字体时有一些延迟,感谢任何帮助。

在我的 mainVC 上,我将 viewDidLoad 中的导航栏标题字体设置为:

self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Billabong", size: 27)!, NSForegroundColorAttributeName: UIColor.whiteColor()]

并且,为了在其他以下 VC 上切换回正常字体,我在 mainVC viewWillDisappear 上将字体改回正常:

self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Medium", size: 17)!, NSForegroundColorAttributeName: UIColor.whiteColor()]

到目前为止一切都很好,newVC 显示原始字体也很好,但是当回到 mainVC 时,字体变化有一些滞后。我这样做的方法是使用显示的 newVC 中的 viewWillDisappear,但是当它 returns 到 mainVC 时,它显示一半的标题和新字体,然后是 ... 并在短暂的延迟后显示标题的其余部分(例如 "CoolTi..." 然后是 "CoolTitle")。

我试过在 mainVC 上使用 viewWillAppear 并且发生了同样的事情,也尝试过在 mainVC 上使用 viewDidAppear 并且字体更改的滞后甚至更糟。不确定如何在没有延迟的情况下切换回其他字体,有什么想法吗?谢谢



[已解决] 感谢@warrenm: 使用 navigationItem.titleView 作为 mainVC 标题,并且在 VC 之间切换字体时没有延迟 代码:

let coolTitle = UILabel()
coolTitle.attributedText = NSAttributedString(string: "coolTitle", attributes: [NSFontAttributeName: UIFont(name: "Billabong", size: 27)!, NSForegroundColorAttributeName: UIColor.whiteColor()])
coolTitle.sizeToFit()
navigationItem.titleView = coolTitle

这感觉像是一个 UIKit 错误,原因如下:如果推送的视图控制器的标题比主视图控制器的标题宽,它似乎可以工作。只有当次 VC 的标题更窄时,主要 VC 的标题才会在过渡期间被截断。

对此有很多可能的解决方法,但我建议将每个 VC 的导航项的 titleView 属性 明确设置为适当配置的 UILabel 带有属性字符串。在这种情况下,您可以将导航项的 title 属性 留空。然后,您可能需要为每个导航项配置 backBarButtonItem 并为其设置适当的标题(否则您的后退按钮将具有通用标题 "Back")。