【问题标题】:NSMenuItem height?NSMenuItem 高度?
【发布时间】:2013-08-03 10:07:08
【问题描述】:

如何更改 NSMenuItem 的高度?当我更改菜单的字体时,NSMenuItem 会自动调整大小以适合标题,标题上方或下方不留空格。看起来很拥挤。

看起来像这样:

希望它看起来像这样:

我已经尝试了一百万次与菜单项的属性标题相关的调整,但无济于事。我也不想使用菜单项的视图属性,因为我想保持突出显示。还有其他想法吗?

编辑:这是我想要的(或多或少),但基于 NSMenu,而不是从头开始重做。

【问题讨论】:

    标签: objective-c cocoa nsmenuitem nsmenu


    【解决方案1】:

    您可以设置具有所需高度的 1 像素宽的空图像:

    NSImage *image=[[NSImage alloc]initWithSize:NSMakeSize(1,30)];
    
    [menuItem setImage:image];
    

    显然,您最终会得到向右偏移 1 个像素的标题,但如果统一应用,这可能是可以接受的。

    【讨论】:

    • 谢谢,效果很好。除非出现更好的情况,否则我会在一天内接受这个作为答案。我想“最好的”解决方案是从头开始重新实现 NSMenu,但这似乎并不值得。我编辑了原始问题以显示 iTunes 11 菜单的图片,这或多或少是我想要的。
    • 很好的跳出框框思考 xD
    【解决方案2】:
    // you want height 100    
    [menuItem setView:[[NSView alloc] initWithFrame:NSMakeRect(0, 0, 0, 100)]];
    

    【讨论】:

    • 不幸的是,这会删除视图中的所有文本。
    【解决方案3】:

    一个选项是使用 NSAttributedString 如下:

    let font = NSFont.systemFont(ofSize: NSFont.systemFontSize)
    let fontLineHeight = (font.ascender + abs(font.descender))
    let lineHeight: CGFloat = fontLineHeight * 1.4
    let style = NSMutableParagraphStyle()
    style.minimumLineHeight = lineHeight
    style.maximumLineHeight = lineHeight
    let baselineOffset = (lineHeight - fontLineHeight) / 2
    let item = NSMenuItem()
    item.attributedTitle = NSAttributedString(string: title,
                                              attributes: [
                                                .paragraphStyle: style,
                                                .baselineOffset: baselineOffset
                                              ])
    

    【讨论】:

      【解决方案4】:

      如果您正在寻找基于 NSWindow 而不是 Carbon 方面的 NSMenu 的重新实现,请查看 JGMenuWindow

      https://github.com/SquaredTiki/JGMenuWindow

      【讨论】:

        猜你喜欢
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多