添加到NSScrollView的documentView的子视图未显示

时间:2013-12-27 20:34:23

标签: objective-c cocoa nsscrollview

我使用IB将NSView包裹在NSScrollView中。在包含NoteView的视图的初始化函数(类为NSScrollView)中,我尝试将子视图添加到NSView,如下所示:

// Initialize custom view with width 802 and height 130, call it initialSubview
// Set initialSubview's frame origin to (20.0, 580.0). documentView of scrollView
// is size (842.0, 740.0)
// Let innerView be the documentView of the scrollView (I have an IBOutlet attaching
// the scrollView's document view to innerView)

[innerView addSubview:initialSubview];

当我这样做时,什么都没有出现。同样,尝试这个:

[[[scrollView] documentView] addSubview:initialSubview];

也不起作用。但是,如果我将它添加到contentView:

[[[scrollView] contentView] addSubview:initialSubview];

子视图显示正常。有任何想法吗? 作为附录,如果我在IB中的documentView中添加类似NSButton的内容,则不做任何事情 也出现了。

3 个答案:

答案 0 :(得分:1)

我想出了这个问题。似乎NSScrollView和Auto-layout对抗自己。 解决方案是删除你是documentView的任何东西(在我的情况下是innerView) 从他们的superview,setTranslatesAutoresizingMaskToConstraints为no,并重新添加视图。 代码看起来像这样:

[innerView removeFromSuperView];
[innerView setTranslatesAutoresizingMaskIntoConstraints:NO];
[scrollView setDocumentView:innerView];

然后你必须手动设置任何你想要的约束

答案 1 :(得分:0)

我很确定contentView是添加它的正确位置。您可能还需要更新内容大小。

答案 2 :(得分:0)

从IB向NSScrollView添加视图会将视图添加到NSScrollView的contentView(NSClipView)。

根据您的设置

  1. NoteView是NSScrollView的剪辑视图(contentView)。
  2. 滚动视图的文档视图是内部视图。
  3. 内部视图(documentView)的子视图,即添加了initialSubView -initWithFrame:of contentView。
  4. 在NSScrollView中,contentView表示documentView的“剪切”表示。 在contentView的init中初始化documentView是没有任何反应的原因。

    这样做

    • 从-awakeFromNib或类似的入口点添加NoteView作为NSScrollView的documentView。
    • 将initialSubView添加为NoteView的子视图。