我的应用程序中有一个NSStatusItem,可以配置为显示一些文本。这个文本可以改变,问题是,每次改变长度时,整个状态项改变其长度,这会导致“宽度闪烁”。
我考虑过将状态项的长度设置为NSVariableStatusItemLength
,插入最长的文本,获取长度,然后将其设置为状态项的常量长度。但是,看起来length
的{{1}}函数对此完全没用,因为它只返回NSStatusItem
而不是实际长度。
那么,有没有另一种方法来预先计算NSStatusItem需要多长时间来保存一些文本和可选的图标?例如,是图标&所有Mac系统上的字体/大小保证相同,所以我可以简单地“测量”我系统上的最佳长度?
答案 0 :(得分:1)
获取长度的解决方法是使用[NSImage size].width
获取状态项中任何图标的宽度,然后使用[NSString sizeWithAttributes:nil].width
获取字符串的宽度。添加填充味道。
使用私有API的另一种方法是设置最长的字符串,然后按如下方式获取宽度:
[[statusItem _window] frame].size.width