Cocoa 无法动态调整NSImageView的大小
我有一个NSImageView,它包含一个动态生成的NSImage。当我更改显示的图像时,我希望动态调整NSImageView的大小,以便它精确地包裹新图像,并调整封闭窗口的大小,以便NSImageView和窗口的每个其他部分之间的空间保持不变。请注意,图像视图的缩放设置为“无”,因为我希望其图像始终以其物理大小显示。为了说明这一点,假设我从a开始。如果将其替换为,我希望NSImageView和封闭窗口都能调整大小以适应它,而不会影响任何其他元素的大小或间距 当前,每当通过步进器或相关文本字段更改放大率级别时,我调用以下方法。尽管重新生成图像并将其加载到NSImageView中效果良好,但调整NSImageView的大小和封闭窗口的大小却没有效果Cocoa 无法动态调整NSImageView的大小,cocoa,nsimage,nsimageview,Cocoa,Nsimage,Nsimageview,我有一个NSImageView,它包含一个动态生成的NSImage。当我更改显示的图像时,我希望动态调整NSImageView的大小,以便它精确地包裹新图像,并调整封闭窗口的大小,以便NSImageView和窗口的每个其他部分之间的空间保持不变。请注意,图像视图的缩放设置为“无”,因为我希望其图像始终以其物理大小显示。为了说明这一点,假设我从a开始。如果将其替换为,我希望NSImageView和封闭窗口都能调整大小以适应它,而不会影响任何其他元素的大小或间距 当前,每当通过步进器或相关文本字段更
- (void) updateMagnification:(NSUInteger)newMagnification {
// Keep values of stepper and associated text field synchronized.
[self.magnificationStepper setIntegerValue:newMagnification];
[self.magnificationTextField setIntegerValue:newMagnification];
// Regenerate image based on newMagnification and display in image view.
[self.qrGenerator generateWithBlockPixelWidth:newMagnification];
self.imageView.image = self.qrGenerator.image;
// Adjust frame size of image view.
NSLog(@"Old size: frame=%@ image=%@", NSStringFromSize(self.imageView.frame.size), NSStringFromSize(self.imageView.image.size));
[self.imageView setFrameSize:NSMakeSize(self.imageView.image.size.width, self.imageView.image.size.height )];
NSLog(@"New size: frame=%@ image=%@", NSStringFromSize(self.imageView.frame.size), NSStringFromSize(self.imageView.frame.size));
//[self.window setViewsNeedDisplay:YES];
//[self.imageView setNeedsDisplay:YES];
//[self.imageView.superview setNeedsDisplay:YES];
}
无论是增大还是减小放大率值,导致图像变小或变大,NSImageView和窗口的大小都保持不变。三个setNeedsDisplay:被注释掉的调用即使未注释也没有效果-我试图确定问题是否与调整大小后未重新绘制的控件有关,但这些调用没有效果。奇怪的是,我的NSLog调用表明imageView的帧确实采用了请求的大小,因为它们产生了以下输出:
2012-06-12 11:02:50.651 Presenter[4660:603] Old size: frame={422, 351} image={168, 168}
2012-06-12 11:02:50.651 Presenter[4660:603] New size: frame={168, 168} image={168, 168}
当然,实际显示不会改变
有趣的是,在Interface Builder中或通过[self.imageView setImageFrameStyle:NSImageFrameNone]编程将imageView的框架样式更改为none,使我的行为更接近我的期望。使图像变大,以使其被图像视图剪裁确实会导致图像视图和窗口变大。但是,从这一点来看,缩小图像不会导致图像视图或窗口相应地调整大小。“无”是唯一显示这种稍微正确行为的图像帧样式-所有四种带边框样式,即斜面[默认]、按钮、凹槽和照片,都显示上述完全不正确的行为
我偶然发现。奇怪的是,只有当他的图像视图的帧样式设置为NSImageFrameNone时,他才观察到有问题的行为,而这是唯一一个让我有点正确行为的值。我尝试在调整大小之前将框架样式修改为非none值,之后将其修改为none,因为这解决了其他人的问题,但对我来说,这产生了与最初将框架样式设置为none时相同的行为
非常感谢您提供的任何帮助。谢谢 嗨,你有什么解决办法吗?我也无法更改NSImageView显示的内容。