NSToolbar可以由用户使用“使用小尺寸”菜单项控制两种大小。每个项目的常规工具栏大小需要32x32图标大小,而小尺寸使用24x24。我不希望默认情况下缩放图标,因为我有一对用于每个工具栏大小的图标。相反,我希望图标在用户更改工具栏大小时自动切换到其他尺寸。
现在IB只有一个工具栏项目的单个图像字段。是否有一种方法可以自动更改图标大小,还是我必须子类化NSToolbar并手动响应大小更改并为每个项目修复图标?
NSToolbar可以由用户使用“使用小尺寸”菜单项控制两种大小。每个项目的常规工具栏大小需要32x32图标大小,而小尺寸使用24x24。我不希望默认情况下缩放图标,因为我有一对用于每个工具栏大小的图标。相反,我希望图标在用户更改工具栏大小时自动切换到其他尺寸。
现在IB只有一个工具栏项目的单个图像字段。是否有一种方法可以自动更改图标大小,还是我必须子类化NSToolbar并手动响应大小更改并为每个项目修复图标?
根据苹果工具栏指南:
你应该提供一个支持多个图像表示方式(如icns或tiff)的单个图像,其中包含默认、常规和小尺寸模式特定的图像表示。适当的图像表示会自动显示为工具栏的当前sizeMode。如果没有合适的表示,工具栏会将表示按比例缩放到当前模式的适当大小,但这样做可能会影响性能和外观。
错误的解决问题方式。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设置新图像。