加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – NSScrollView不绘制文档视图?

发布时间:2020-12-16 03:00:05 所属栏目:百科 来源:网络整理
导读:我创建了一个实现initWithFrame和drawRect的自定义视图.在IB中,我创建了一个窗口,并将自定义视图放在窗口的中心.然后我使用编辑器嵌入滚动视图将自定义视图放置在滚动视图中.那么什么呢? initWithFrame消息被发送到自定义视图,但是drawRect消息永远不会被发
我创建了一个实现initWithFrame和drawRect的自定义视图.在IB中,我创建了一个窗口,并将自定义视图放在窗口的中心.然后我使用编辑器>嵌入>滚动视图将自定义视图放置在滚动视图中.那么什么呢? initWithFrame消息被发送到自定义视图,但是drawRect消息永远不会被发送.

没有我的具体的自定义视图,可以产生类似的行为.如果以相同的方式将包装标签嵌入到scrollview中,那么也不会绘制.

如何获取scrollview来绘制内容?

另外,在一些有关的笔记中,以编程方式调整嵌入在scrollview中的视图的正确方法是什么?

谢谢!

解决方法

NSScrollView不像其他视图.
它做的事情是不同的,它使得每个人都疯狂,特别是一旦你习惯了自动布局思维.
它也是其中一个视图(以及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:用新的点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读