如何垂直对齐我的状态栏项目文本?

How can I vertically align my status bar item text?

左边一张是Apple的日期和时间,一张是我申请的。如您所见,我的应用程序的文本显示低于 Apple 应用程序的文本。哪个看起来不漂亮。如何解决?

self.statusBarItem.image                    = nil
self.statusBarItem.button?.imagePosition    = .NoImage
self.statusBarItem.button?.title            = "Sun 5 Jun  13:35"

你可以用偏移量来做。你不能这样做,因为它需要在状态项按钮栏上完成。

button.frame = CGRectMake(0.0, 0.5, button.frame.width, button.frame.height)

我想快速补充一下。虽然接受的答案确实根据问题的上下文起作用。如果您有图像,它将不起作用,因为这会移动所有内容(图像和文本)。我发现由于某种原因,图像是垂直居中的,但文本不是。

在这种情况下,您实际想要做的是设置 NSAttributedString.Key.baselineOffset,您可以在其中导出基线值,如下所示

    var displayScale: CGFloat = 1.0
    let pstyle = NSMutableParagraphStyle()
    pstyle.alignment = .center;
    let aStr = NSAttributedString(string: str, attributes: [NSAttributedString.Key.paragraphStyle: pstyle, NSAttributedString.Key.font: font])
    if let main = NSScreen.main {
        displayScale = main.backingScaleFactor
        if displayScale <= 0.0 {
            displayScale = 1.0
        }
    }
    let textHeight = aStr.size().height
    baselineOffset = ((font.ascender - font.descender) - textHeight) / displayScale
    button.attributedTitle =  = NSAttributedString(string: str, attributes: [NSAttributedString.Key.paragraphStyle: pstyle, NSAttributedString.Key.baselineOffset: baselineOffset, NSAttributedString.Key.font: font])

此处的免责声明是我对 displayScale 部分并不完全确定。我推测这需要纠正 pixels/points。

我只是添加了这个答案,因为我一直在努力寻找一个好的答案。我的灵感来自于此:Center two fonts with different different sizes vertically in an NSAttributedString

如果此技术有误,我很想知道,以便我可以修复它。