【发布时间】:2011-04-04 09:34:28
【问题描述】:
Cocoa 的 NSScrollView 被严重低估了。我希望这里有人知道这一切是怎么回事,可以给我几秒钟的时间。
所以我有一个自定义的 NSView。我实现 -drawRect: 让它绘制一些东西,用颜色填充自己,等等。然后我有一个 NSScrollView 包装它(通过界面 Builder 设置)。
现在,内部自定义视图的尺寸必须大于适合外部滚动视图的尺寸——它才能滚动。我意识到这一点。我顺便配置了它,以便滚动视图调整到周围窗口的大小,但这不重要。
我重写了我的内部视图的 -frame 方法以返回一个大小至少为 1000x1000 的框架。
- (NSRect)frame {
CGFloat w = 1000;
CGFloat h = 1000;
if (self.superview.bounds.size.width > w)
w = self.superview.bounds.size.width;
if (self.superview.bounds.size.height > h)
h = self.superview.bounds.size.height;
return NSMakeRect(0, 0, w, h);
}
这是结果,我很难解释:
- 当滚动视图包围小于 1000x1000 的区域时,我可以滚动
但是
-
唯一用颜色填充的区域(即我的 -drawRect: 方法对它有任何影响)是
- 与滚动视图的边界一样大
- 位于 (0,0。我使用翻转,所以它在左上角,滚动后它最终位于可见区域之外。
- 根本不绘制此无关矩形之外的可见区域。
除此之外我什么都不知道。 似乎绘制的矩形被裁剪到滚动视图在窗口中的位置、大小或其他方面——但它没有考虑滚动的“位置”。
应该注意的是,我真的不希望发生其他任何事情。我觉得我错过了一块,但找不到哪个。对不起,文字墙,但我现在无法更好地解释。我希望回答比问容易。
问候和希望,
不是瑞克·阿斯特利
【问题讨论】:
-
这个 SO 答案解释了如何在自动布局环境 (Swift) 中的
NSScrollView中使用NSView:stackoverflow.com/a/46431542/1418981
标签: objective-c cocoa clipping nsscrollview