为不同的工具栏大小更改 NSToolbar 图标

Ins*_*ges 5 cocoa

NSToolbar 可以有两种尺寸,由用户使用“使用小尺寸”菜单项控制。常规工具栏大小要求每个项目使用 32x32 图标大小,而小尺寸使用 24x24。我不希望图标默认缩放,因为每个工具栏大小都有一对图标。相反,我希望图标在用户更改工具栏大小时自动切换到其他大小。

现在,IB 对于每个工具栏项只有一个图像字段。有没有办法自动更改图标大小,或者我是否必须继承 NSToolbar 并手动响应大小更改并修复每个项目的图标?

val*_*ine 2

解决问题的方法是错误的。NSToolbar 在工具栏大小更改之前和/或之后不提供任何与工具栏交互的方式。

也许,您可以解决子类化 NSToolbarItem 并覆盖该方法的问题:

- (void)setMinSize:(NSSize)size
Run Code Online (Sandbox Code Playgroud)

像下面这样的东西应该可以解决您的问题。

- (void)setMinSize:(NSSize)size {
    NSLog(@"setMinSize: %@", NSStringFromSize(size));
    if(size.height < 32.0) { //if we're resizing to min_size than apply a new image based on the actualIdentifier
        if([[self itemIdentifier] isEqual:@"effectsButton"]) {
            [self setImage:[NSImage imageNamed:@"effectsButton24"]];
        }
    } else { //else switch back to the standard image
        if([[self itemIdentifier] isEqual:@"effectsButton"]) {
            [self setImage:[NSImage imageNamed:@"effectButton"]];
        }
    }
    [super setMinSize:size];
}
Run Code Online (Sandbox Code Playgroud)

只需检查新尺寸是否较小(<32.0)。如果是这种情况,您可以根据提供的标识符为每个 NSToolbarItem 设置一个新图像。