添加为子视图的 NSView 不显示

Posted

技术标签:

【中文标题】添加为子视图的 NSView 不显示【英文标题】:NSView added as subview doesn't show 【发布时间】:2012-04-21 21:32:20 【问题描述】:

我有一个令人费解的问题。在 mac os x 10.7 中开发可可应用程序。

我的应用程序主窗口包含一个拆分视图。在拆分视图的其中一个子视图中的某个使用上下文中,加载了一个带有一些标签(nstextfield)的自定义视图和一个拆分视图(实例化了一个加载 nib 并从该控制器获取视图的视图控制器)。自定义视图的框架设置为拆分视图子视图边界,一切正常。 问题是应该加载第二个拆分视图的子视图之一(相同的方法:视图控制器-nib-view-frame/bounds),其中包含一个包含表格视图和一个按钮的自定义视图,但在这种情况下没有任何显示。一切都以相同的方式完成,但最后一个自定义视图不可见。有什么想法吗?

谢谢

(编辑)

这是我用来为要添加的视图实例化控制器、获取视图并将其作为子视图添加到拆分视图的子视图的代码

- (void)loadSubview 

    self.subviewToAddController = [[viewController alloc] initWithNibName:nil bundle:nil];
    //nib name is coded in the controller class definition

    [[self.subviewToAddController view] setFrame:[self.splitViewContainerSubView bounds]];
    //container subView is an outlet

    [self.splitViewContainerSubView addSubview:[self.subviewToAddController view]];


但是我不认为问题出在这段代码中,因为如果我向容器子视图询问它自己的子视图,我可以看到新的子视图出现在列表中。它只是没有显示。如果我将它添加为拆分视图的子视图(刚刚进行的测试)或作为最外部拆分视图的子视图的子视图,它也会正确显示(对不起,解释混乱,我需要一个图表,但在这个那一刻我做不到)

为了详细说明我的疑问(我不想误导,所以我之前没有提到)不能是坐标问题,所以视图被正确加载并添加为子视图但不可见,因为被隐藏什么东西或显示在可见区域之外?

(更新)

很抱歉花了这么长时间才发布更新。 经过更多测试后,我发现问题与自动布局有关。不知道确切的问题是什么以及如何解决它。我最终为遇到麻烦的笔尖关闭了它,并使用旧方法来设置界面对象的位置和大小/调整大小。不是最好的方法,但现在我可以继续。

【问题讨论】:

请编辑您的问题以包含将自定义视图添加为所需父视图的子视图的代码。 除非您对父视图进行了一些边界操作,否则它的边界应该是子视图frame 的正确矩形,以便子视图占据其整个父视图。您可以使用NSLog查看。 【参考方案1】:

我最好的猜测是您没有正确设置视图的自动调整大小掩码。

【讨论】:

以上是关于添加为子视图的 NSView 不显示的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局的 xib 添加为子视图时不显示

将viewController添加为子视图Swift不显示任何组件

NSView 不显示更新

UIButton 的 title 属性正确记录但在将按钮添加为子视图时未显示

将 xib 视图初始化为另一个 NSView 的子视图

在其他视图上显示 NSView 子类