4

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

4

4 回答 4

0

设置滚动视图的背景以绘制正确的背景......这会重复日历效果,因为没有动态内容

于 2014-03-14T15:26:49.037 回答
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;

        }
    }
}
于 2014-03-14T15:14:14.247 回答
0

它几乎就像 NSScrollView 文档所说的那样。利用:

-(void)setDocumentView:(NSView *)aView

在上面设置一个 NSClipView。这会保存大于显示部分的绘制内容,并将滚动不可见的部分进入视图。您还应该看看“可可绘图指南”。

于 2013-01-01T15:56:24.470 回答
0

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

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

10.7 后可用

于 2015-10-06T09:50:52.560 回答