NSToolbar可以使用“使用小尺寸”菜单项由用户控制两种尺寸。常规工具栏大小每个项目需要32x32图标大小,而小尺寸使用24x24。我不希望图标默认缩放,因为每个工具栏大小都有一对图标。相反,当用户更改工具栏大小时,我希望图标自动切换到其他大小。
现在IB每个工具栏项目只有一个图像字段。有没有办法自动更改图标大小或是否必须子类化NSToolbar并手动响应大小更改并修复每个项目的图标?
答案 0 :(得分:2)
Apple工具栏指南:
您应该在支持多个图像表示(如icns或tiff)的单个图像中提供特定于默认,常规和小尺寸模式的图像表示。将自动显示工具栏当前sizeMode的相应图像表示。如果没有适当的表示,工具栏会将表示缩放到当前模式的适当大小,但会降低性能和外观的成本。
答案 1 :(得分:0)
解决问题的错误方法。在更改工具栏大小之前和/或之后,NSToolbar不提供任何与工具栏交互的方法。
也许,您可以解决子类化NSToolbarItem并覆盖该方法的问题:
- (void)setMinSize:(NSSize)size
以下内容对您的问题应该没问题。
- (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];
}
只需检查新尺寸是否小(<32.0)。如果是这种情况,您可以根据提供的标识符为每个NSToolbarItem设置新图像。