NSImageView图像未在运行的应用程序中显示(但在界面构建器中的xib中正确显示)

时间:2017-06-24 11:37:53

标签: objective-c xcode macos cocoa interface-builder

我在窗口中显示图像时出现了一些问题,我将其从主故事板移到了自己的xib文件中。

我为需要显示的窗口创建了一个LoginWindow.xib,并使用常规

初始化其视图控制器
self.loginViewController = [[LoginViewController alloc] initWithWindowNibName:@"LoginWindow"];
[self.loginViewController showWindow:self];

在xib窗口中,我将文件的所有者窗口委托连接到窗口,因此我在LoginViewController中的所有代码 - (void)windowDidLoad都能完美地工作,整个过程。

但是,我有一个应该在窗口中显示的NSImageView。但是图像显示在界面构建器中,但不在运行的应用程序中,我不知道为什么。

在下面的屏幕截图中,您可以看到图像具有正确的图像名称(来自“Assets.xcassets”文件),并显示在Interface Builder中,但不会显示在正在运行的应用程序中。

(注意:图像下方的渐变视图是覆盖drawRect以创建渐变的自定义视图)

我还使用了UI调试器来查看图像是否显示在渐变视图下方,但没有成功。奇怪的是,图像甚至显示在UI层调试窗口中(下面的屏幕截图2)......

我可能错过了一个需要设置或连接的简单复选框或值,因为在将窗口从Main.storyboard文件移到单独的XIB文件之前,所有这些工作都很完美......

有人知道如何/为何?我已经清理了整个构建目录,关闭并重新打开xcode,......你可以命名。

Interface Builder screenshot

UI Debugger screenshot

2 个答案:

答案 0 :(得分:1)

我使用了vp2698的建议来实现这一点,并将以下几行添加到我的windowDidLoad方法中:

[self.logoImageView removeFromSuperview];
[self.window.contentView addSubview:self.logoImageView positioned:NSWindowAbove relativeTo:nil];

logoImageView是带图像的NSImageView的出口)

所以:谢谢vp2698!

所以是的:它现在有效......但是有人可以解释为什么这不能直接使用Interface Builder吗? 为什么完全我需要在所有其他视图“上方”重新添加图像,而我已经通过界面构建​​器将其置于其他所有位置之上? (“调试视图层次结构”屏幕截图也确认了......?)

我很高兴我的工作,但我也真的想了解问题的原因。谢谢!

答案 1 :(得分:0)

在描述中,图像具有正确的名称(来自“ Assets.xcassets”文件),但是您必须检查图像是否具有所有比例。如果您只有一张图像用于3倍,而错过了1倍和2倍,则将无法使用。还要查看日志,您将看到类似的问题:“图像不存在。”