Центрируйте NSAttributedString с различными размерами шрифта по вертикали в NSStatusBarButton - PullRequest
0 голосов
/ 16 марта 2020

Я запутался в позиционировании текста в NSStatusBarButton.

Моя проблема в том, что у меня есть NSAttributedString, которая содержит два разных размера шрифта. Теперь я хочу расположить шрифт по центру по вертикали, а затем назначить его для атрибута атрибута NSStatusBarButton.

Следующая статья мне очень помогла: Центрирование двух шрифтов с разными размерами по вертикали в NSAttributedString

Но проблема в том, что принятое там решение не работает в StatusBar. Вот небольшой пример:

let test = NSMutableAttributedString()
test.append(NSAttributedString(string: "Te", attributes:[.font: NSFont.systemFont(ofSize: CGFloat(15))]))
test.append(NSAttributedString(string: " st", attributes:[.font: NSFont.systemFont(ofSize: CGFloat(10))]))
button.attributedTitle = test

Результат:

baseline positioning

Со знанием другого поста StackOverflow центрирование будет выглядеть как это:

let test = NSMutableAttributedString()
test.append(NSAttributedString(string: "Te", attributes:[.font: NSFont.systemFont(ofSize: CGFloat(15))]))
test.append(NSAttributedString(string: " st", attributes:[
    .font: NSFont.systemFont(ofSize: CGFloat(10)),
    .baselineOffset: 2.5 // 15 - 10 = 5 / 2 = 2.5
]))
button.attributedTitle = test

Результат:

should be positioned centrally

Следовательно, значения 2,5 неверны. После некоторого тестирования я обнаружил, что значение 1 подходит для этого сценария. Но я ищу общее решение, которое всегда работает - без ручного тестирования.

Зачем мне это нужно? Я хотел бы иметь смайлик (например, ??) и время рядом с ним в строке состояния моего приложения MacOS. Emoji должно быть намного больше, чем время. Пользователи также могут установить размер шрифта времени (8 - 20). Размер смайликов всегда остается неизменным (22).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...