我使用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
的内容,则不做任何事情
也出现了。
答案 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)。
根据您的设置
在NSScrollView中,contentView表示documentView的“剪切”表示。 在contentView的init中初始化documentView是没有任何反应的原因。
这样做