如何垂直对齐状态栏项目文本?
Posted
技术标签:
【中文标题】如何垂直对齐状态栏项目文本?【英文标题】:How can I vertically align my status bar item text? 【发布时间】:2016-10-05 02:49:32 【问题描述】:图片左边一个是苹果的日期和时间,一个是我的应用程序。正如您所见,我的应用程序的文本看起来比 Apple 的要低。哪个看起来不漂亮。如何解决?
self.statusBarItem.image = nil
self.statusBarItem.button?.imagePosition = .NoImage
self.statusBarItem.button?.title = "Sun 5 Jun 13:35"
【问题讨论】:
我没有使用约束。您看到的代码是我使用的代码,除了顶部的'let statusBarItem = NSStatusBar.systemStatusBar().statusItemWithLength(NSVariableStatusItemLength)' 我能够与以下代码对齐:“button.frame = CGRectMake(0.0, 0.5, button.frame.width, button.frame.height)” 手动更正偏移量,但也许有人有更好的解释。 @Mark 你能把代码分享到 GitHub 或类似的地方,以便我看看吗? 或者为什么不嵌入导航控制器? 所有都不起作用,因为它需要在状态项按钮上完成。偏移量对我来说实际上是一个足够好的工作。很抱歉给大家添麻烦了。我正在尝试删除问题,但尚未成功。 【参考方案1】:你可以在偏移量中做到这一点。您不能这样做,因为它需要在状态项按钮栏上完成。
button.frame = CGRectMake(0.0, 0.5, button.frame.width, button.frame.height)
【讨论】:
【参考方案2】:我想对此进行快速补充。虽然接受的答案确实根据问题的上下文起作用。如果您有图像,它将不起作用,因为这会移动所有内容(图像和文本)。我发现由于某种原因,图像是垂直居中的,但文字不是。
在这种情况下您真正想要做的是设置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
部分。我认为这是校正像素/点所必需的。
我只添加了这个答案,因为我一直在努力寻找一个好的答案。基于此,我得到了这样做的灵感:Center two fonts with different different sizes vertically in an NSAttributedString
如果这项技术有问题,我很想知道,以便我可以修复它。
【讨论】:
以上是关于如何垂直对齐状态栏项目文本?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过删除状态栏、快速访问和拆分视图控件来节省 Eclipse 中的垂直空间?
(iOS 9 及以下)如何在用户交互期间指定标签栏项目文本颜色(选中状态和正常状态)