没有我的具体的自定义视图,可以产生类似的行为.如果以相同的方式将包装标签嵌入到scrollview中,那么也不会绘制.
另外,在一些有关的笔记中,以编程方式调整嵌入在scrollview中的视图的正确方法是什么?
谢谢!
解决方法
它做的事情是不同的,它使得每个人都疯狂,特别是一旦你习惯了自动布局思维.
它也是其中一个视图(以及NSTableView,NSOutlineView和NSCollectionView等),在开始查看事情之前,有很多部分要设置.自动布局也增加了一点.
默认情况下,NSScrollView至少包含3个子视图:
>一个NSClipView对象. (苹果称之为内容视图,它是什么
是可见的.)
>两个NSScroller对象.
NSClipView或Content View对象包含某种NSView.
(苹果称之为文档视图)
如果从对象库添加一个简单的NSScrollView到您的xib中,那么在Interface Builder中将显示一个大小,但在运行时它将具有零大小.
每次都会踢你的屁股.
您可以通过添加日志记录来看到这一点.
NSLog(@“文档视图的大小:%@”,NSStringFromRect(_myScrollView.documentView.frame);
即使你添加一个子视图并调用setNeedsDisplay:YES一整天,你将看不到一件坏事.
有一些你可以做的事情.
首先,您可以使用setFrameSize设置documentView的大小:NSMakeSize(somePointsWide,somePointsHigh)
您也可以使其成为一个自定义的NSView子类,它具有一个内在的内容实现,它根据你想要放置的任何逻辑规则(包括一些默认的最小值)来计算出来.
您也可以简单地说,所有子视图必须至少具有文档视图中的N个点或更多在每个边缘具有自动布局.
VFL(视觉格式语言)将如下所示:@“H:| -nPoints- [aSubviewOfDocumentView] -nPoints- |”而这个@“V:| -nPoints- [aSubviewOfDocumentView] -nPoints- |”
(确保您的子视图具有自己的内在大小或一些子视图,使其具有最小尺寸…并实现 – (BOOL)翻译自动调整MaskIntoConstraints {返回NO;},并关闭自动调整您的文档视图的子视图,或通过调用setAutoResizesSubviews:否或你会讨厌生活.)
现在这导致一个奇怪的事情.使用自动布局,尽可能多地停止思考框架和脚注,通常都很好,但是使用NSScrollView documentView,您可能需要考虑不使用自动布局来定位子视图.在某些情况下,不太可能更简单,只需让documentView变得容纳.如果您使用上述“nPoints”方法,并且您的子视图可拖动,则您只需要捕获子视图的帧起始点的NSPoint(使用它来确定您的增量),然后单击mouseDown点,拖动完成后,捕获鼠标并计算新帧起始点的增量.然后调用setFrameOrigin:用新的点.