Cocoa 无法动态调整NSImageView的大小

Cocoa 无法动态调整NSImageView的大小,cocoa,nsimage,nsimageview,Cocoa,Nsimage,Nsimageview,我有一个NSImageView,它包含一个动态生成的NSImage。当我更改显示的图像时,我希望动态调整NSImageView的大小,以便它精确地包裹新图像,并调整封闭窗口的大小,以便NSImageView和窗口的每个其他部分之间的空间保持不变。请注意,图像视图的缩放设置为“无”,因为我希望其图像始终以其物理大小显示。为了说明这一点,假设我从a开始。如果将其替换为,我希望NSImageView和封闭窗口都能调整大小以适应它,而不会影响任何其他元素的大小或间距 当前,每当通过步进器或相关文本字段更

我有一个NSImageView,它包含一个动态生成的NSImage。当我更改显示的图像时,我希望动态调整NSImageView的大小,以便它精确地包裹新图像,并调整封闭窗口的大小,以便NSImageView和窗口的每个其他部分之间的空间保持不变。请注意,图像视图的缩放设置为“无”,因为我希望其图像始终以其物理大小显示。为了说明这一点,假设我从a开始。如果将其替换为,我希望NSImageView和封闭窗口都能调整大小以适应它,而不会影响任何其他元素的大小或间距

当前,每当通过步进器或相关文本字段更改放大率级别时,我调用以下方法。尽管重新生成图像并将其加载到NSImageView中效果良好,但调整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显示的内容。