Как отобразить несколько строк в приложении меню macos?

#swift #macos #nsstatusitem #nsstatusbar

#swift #macos #nsstatusitem #nsstatusbar

Вопрос:

Первоначально я думал, что добавление новой строки должно сработать. Проблема в том, что высота строки слишком велика. Как я могу сделать его более плотным (ближе друг к другу)?

В начальной строке git 41 есть следующий пример. Но в документах Apple говорится, что пользовательский вид внутри NSStatusItem устарел. (не уверен, что он устарел для представлений внутри NSMenuItem)

         let statusBar = NSStatusBar.system
        statusBarItem = statusBar.statusItem(withLength: NSStatusItem.squareLength)
        statusBarItem.button?.title = "123n456"
 

UPD
Что я получил до сих пор. Однако это не Y-центрировано. И statusItem?.button?.frame = CGRect(x: 0.0, y: -2.0, ... кажется неправильным и смещает начальный значок вниз.

 var comb = NSMutableAttributedString(attributedString: str1)
comb.append(br) // new line
comb.append(str2)
let paragraphStyle = NSMutableParagraphStyle()
        
paragraphStyle.maximumLineHeight = 9

comb.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, comb.length))
statusItem?.button?.attributedTitle = comb
 

UPD (отложенный подход с n и baselineoffset)

 var comb = NSMutableAttributedString(attributedString: NSAttributedString(string: "n")) // this
comb.append(top)
comb.append(br)
comb.append(bottom)

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.maximumLineHeight = 9
comb.addAttribute(NSAttributedString.Key.baselineOffset, value: 3.0, range:NSMakeRange(0, comb.length))
 

введите описание изображения здесь

Комментарии:

1. Вместо title этого установите значение attributeTitle в атрибутивную строку со стилем абзаца с меньшим значением высоты строки.

Ответ №1:

Как отметил Мэтт, используйте attributeTitle и NSMutableParagraph

 let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.maximumLineHeight = 9
paragraphStyle.alignment = .left
 

Форматирование столбцов может быть достигнуто с помощью табуляции, пробелов или других разделителей

 NSAttributedString(string: "n10 u{2022} 220 u{2022} 4999", attributes: textAttr) // this is a row
 

statusItem?.button?.attributedTitle = rows

И сдвинуть текст снизу:

 rows.addAttribute(NSAttributedString.Key.baselineOffset, value: 2.0, range:NSMakeRange(0, rows.length))
 

введите описание изображения здесь