macOS状态栏计时器文本与时间日期垂直对齐异常问题求助
macOS状态栏计时器文本垂直对齐问题
我正在尝试将状态栏中的计时器文本(截图中的“0:00”)与macOS状态栏的时间日期项垂直对齐。测试发现:
- 内置显示器(白色字体):需要设置
baselineOffset: 0.5才能与时间日期对齐 - 外接显示器(黑色字体):无需设置偏移量即可对齐
但当屏幕焦点切换至非活跃状态(点击其他屏幕切换焦点)时,对齐状态会发生变化,且内置与外接显示器的变化方向相反。已在27英寸4K显示器和14英寸MBP的不同分辨率下测试,结果一致。
TLDR 对齐情况汇总
屏幕活跃状态下的垂直偏移(不同baselineOffset值)
| 显示器类型 | baselineOffset = 0 | baselineOffset = 0.5 |
|---|---|---|
| 内置显示器 | 偏低 | 正常 |
| 外接显示器 | 正常 | 偏高 |
baselineOffset = 0时,不同焦点状态的垂直偏移
| 显示器类型 | 屏幕活跃状态 | 屏幕非活跃状态 |
|---|---|---|
| 内置显示器 | 偏低 | 正常 |
| 外接显示器 | 正常 | 偏低 |
相关截图说明
baselineOffset开启 vs 关闭:白色为内置显示器效果,黑色为外接显示器效果- 活跃状态 vs 非活跃状态屏幕:白色为内置显示器效果,黑色为外接显示器效果
代码片段
class AppDelegate: NSObject, NSApplicationDelegate { private var statusItem: NSStatusItem! // ... private func updateStatusBar() { guard let button = statusItem.button else { return } let title = "0:00" DispatchQueue.main.async { let attributes: [NSAttributedString.Key: Any] = [ .font: NSFont.systemFont(ofSize: NSFont.systemFontSize, weight: .regular), .foregroundColor: NSColor.textColor, .baselineOffset: 0.5 ] let attributedTitle = NSAttributedString(string: title, attributes: attributes) button.attributedTitle = attributedTitle } } // ... } @main class App { static func main() { let app = NSApplication.shared let delegate = AppDelegate() app.delegate = delegate app.run() } }
内容的提问来源于stack exchange,提问作者raphinzo
相关产品推荐
相关产品推荐

