簡體   English   中英

如何垂直對齊狀態欄項目文本?

[英]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部分。 我認為需要校正像素/點。

我只是添加了這個答案,因為我很難找到一個好的答案。 基於此,我得到了靈感: 在NSAttributedString中垂直居中兩種不同大小的字體

如果這種技術錯了,我有興趣知道,所以我可以解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM