调整大小的NSImageView不重绘

0x9*_*x90 7 cocoa nsimageview

我有一个NSImageView,它从应用程序包中加载一个图像.

它设置如下:

coverImage.image = [NSImage imageNamed:@"themeSignEnd.png"];
coverImage.imageScaling = NSImageScaleNone;
coverImage.imageAlignment = NSImageAlignLeft;
Run Code Online (Sandbox Code Playgroud)

图像显示得很好.

NSImageView的大小是基于其他几个因素计算的,然后使用以下代码进行设置:

coverImage.frame = CGRectMake((1280 - 869) / 2, 0, 869 * percentage, 800);
Run Code Online (Sandbox Code Playgroud)

这在第一次完成时(应用程序启动时)完全正常.

NSImageView采用大小,所包含的图像在适当的边界处被截断.

不幸的是,当我在应用程序运行时尝试调整NSImageView的大小时(使用上面相同的代码),它不会明显更新.

NSLogging coverImage.frame显示帧本身已正确更新.但是,视图似乎没有重新绘制 - 无论是缩小还是增长帧时.此外,当我退出并重新启动应用程序时,NSImageView会绘制正确的边框.

什么可能导致这种行为?

是否有可能不重绘NSImageView?如果是这样,我该如何强制重绘?

我错过了NSImageView的任何其他怪癖会导致这种行为吗?

编辑:

事实证明,只有在ImageFrameStyle属性设置为时才会发生此错误NSImageFrameNone.如果框架被设置为其他任何东西,它会被重新绘制得很好.不幸的是,我们需要在没有框架的情况下显示图像.

NSImageViews在有和没有框架的渲染中有什么区别可以解释这个吗?

Dar*_*ski 5

我的NSImageView imageFrameStyle属性设置为非常类似的问题NSImageFrameNone.发生问题的原因是自动布局设置.你可以在这里查看我的问题:如果帧样式是NSImageFrameNone,NSImageView将不会缩小图像


0x9*_*x90 1

所以我找到了解决这个问题的方法,但它相当黑客。

正如编辑中提到的,此错误仅在 ImageFrameStyle 设置为 NSImageFrameNone 时发生。当我将 ImageFrameStyle 设置为其他内容,然后调整其大小,然后在调整大小后再次将其设置为 NSImageFrameNone 时,一切正常:

[coverImage setImageFrameStyle: NSImageFramePhoto];
coverImage.frame = CGRectMake((1280 - 869) / 2, 0, 869 * percentage, 800);
[coverImage setImageFrameStyle: NSImageFrameNone];
Run Code Online (Sandbox Code Playgroud)

这可行,但不是很漂亮。因此,我将把这个问题再留几天,希望能找到更好的答案。