iOS: 后退按钮标签被自定义字体截断

iOS: Back button label is cut off with custom font

我正在为导航项使用自定义字体;当我转到另一个视图控制器时,新呈现的视图控制器上的后退按钮在左侧被切断。在执行 segue 之前,我在第一个视图控制器上尝试了 setTitlePositionAdjustment(_ adjustment: UIOffset, for barMetrics: UIBarMetrics) 但它没有取代按钮:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "Show Contents" {
        if let viewController = segue.destination as? ContentsTableViewController {
                viewController.navigationItem.backBarButtonItem?.setTitlePositionAdjustment(UIOffsetMake(10, 0), for: .default)

        }
    }
}

使用此代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let backBarButtonItem = UIBarButtonItem(title: "خانه", style: .plain, target: nil, action: nil)
    backBarButtonItem.setTitleTextAttributes([.font : UIFont(name: "B Koodak", size: 32)!], for: .normal)
    navigationItem.backBarButtonItem = backBarButtonItem
}

我得到以下信息:

我在使用自定义字体时遇到了这个问题,我在 parent 视图中隐藏导航栏并在 child 视图(在 viewWillAppear(_:) 中)中显示它。弄清楚此操作中的某些内容导致按钮标签绘制得太窄,我尝试在 [=23] 中调用导航栏上的各种 UIKit 重绘方法(setNeedsLayout() & setNeedsDisplay() =] 查看控​​制器的 viewDidLoad() 方法,但无济于事。正如 OP 所写,我能够通过缩小字体大小来正确绘制标签。

我最终能够通过手动将 backBarButtonItem 属性 设置为 UIBarButtonItem 的新实例,以正确的大小正确绘制 "Back" 作为标题(在我的 parent 视图控制器中)。这可能就是它在已接受的答案中起作用的原因。这似乎是 UIKit 中的错误,因为我不认为隐藏和显示导航栏会导致此行为。