我应该如何在NSScrollView中包装自定义NSView?

Not*_*ley 5 cocoa clipping objective-c nsscrollview

Cocoa的NSScrollView被解释得非常糟糕.我希望这里有人知道它的全部内容并且可以让我几秒钟.

所以我有一个自定义的NSView.我实现了-drawRect:它可以绘制一些东西,用颜色填充它,无论如何.然后我有一个NSScrollView包装它(通过界面生成器设置).

现在,内部自定义视图的大小必须大于适合外部滚动视图的大小 - 以便滚动.我意识到这一点.我偶然配置它,以便滚动视图调整到周围窗口的大小,但这应该无关紧要.

我重写了我的内部视图的-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);
}
Run Code Online (Sandbox Code Playgroud)

这是结果,我无法解释:

  • 当滚动视图包含小于1000x1000的区域时,我可以滚动

  • 唯一充满颜色的区域(即我的-drawRect:方法对其有任何影响)是

    • 与滚动视图的边界一样大
    • 位于(0,0.我使用翻转,因此左上角,滚动后最终位于可见区域之外.
  • 位于这个不相关的矩形之外的可见区域根本没有被绘制.

除此之外,我什么都不知道.它看起来像矩形绘制剪裁到滚动视图窗口的位置和大小,或东西,但它不会采取滚动"位置"考虑在内.

应该指出的是,我真的不希望发生任何其他事情.我觉得我错过了一块,却找不到哪一块.对不起文字的墙,但我现在无法解释得更好.我希望它比回答要容易得多.

关心和希望,

不是瑞克阿斯特利

Max*_*ann 3

覆盖是一个非常非常-frame糟糕的主意。有很多事情取决于实际实例变量是否具有正确的值。相反,尝试将框架设置为您想要使用的框架setFrame:,如果幸运的话,这可能会解决您所有的问题......