NSScrollView,弹性和绘制超出视图的范围

时间:2013-01-01 15:42:23

标签: macos cocoa nsscrollview

我正在尝试使用NSScrollView重新创建一些可以在Apples Calendar应用程序(osx)中看到的功能。当您在日历应用程序中向上和向下滚动浏览视图的边界时,它不仅仅是一个空白区域,而是从日历本身扩展网格线。我想知道如何做到这一点?我希望答案会非常简单。像绘制内容视图大于需要的东西,然后在滚动视图上设置一些属性来约束它认为是可滚动内容。在倾注NSScrollView文档后,我还没有找到任何线索。如果答案相对简单,请原谅我,谢谢你的答案。

4 个答案:

答案 0 :(得分:1)

您可以使用半私有方法在文档视图外部绘图:

- (void)drawBackgroundOverhangInRect:(NSRect)dirtyRect {
    [[NSColor cyanColor] set];
    NSRectFill(dirtyRect);
}

10.7之后可用

答案 1 :(得分:0)

就像NSScrollView文档所说的那样。使用:

-(void)setDocumentView:(NSView *)aView

在其上设置NSClipView。这保持绘制的内容大于显示的部分,并将滚动的部分在视图中不可见。您还应该看一下“可可绘图指南”。

答案 2 :(得分:0)

这是在Stackoverflow上的其他人的代码中采用的。此代码将水平网格绘制在表格的顶部。我想你可以改变它来绘制垂直网格。把它放在你的NSTableView子类中:

- (void)drawGridInClipRect:(NSRect)clipRect
{
    NSRect boundsToDraw = clipRect;
    CGFloat   yStart   = 0;

    if ( clipRect.origin.y < 0 ) {

        while (yStart > NSMinY(boundsToDraw)) {

            CGFloat yRowTop = yStart - self.rowHeight;

            NSRect rowFrame = NSMakeRect(0, yRowTop, boundsToDraw.size.width, 1.0);

            [[self gridColor] set];

            NSRectFill(rowFrame);

            yStart -= self.rowHeight;

        }
    }
}

答案 3 :(得分:0)

设置scrollView的背景以绘制正确的背景......由于没有动态内容,因此会复制日历效果