如何在Cocoa中自动滚动NSTextView以在窗口上垂直居中文本?

时间:2011-03-12 11:36:39

标签: cocoa scroll nstextview nsscrollview

我正在NSScrollView中创建一个带有NSTextView的文本编辑器,并希望每当用户插入一些文本时自动滚动textview,以便插入的文本在窗口(或文本视图)上垂直居中。我发现这个示例代码滚动到滚动视图的顶部,但无法真正理解它是如何工作的。我已经搞砸了这段代码,但是我的textview似乎没有任何逻辑就跳了起来。任何人都可以帮助我吗?

- (void)scrollToTop:sender;
{
    NSPoint newScrollOrigin;

    // assume that the scrollview is an existing variable
    if ([[scrollview documentView] isFlipped]) {
        newScrollOrigin=NSMakePoint(0.0,0.0);
    } else {
        newScrollOrigin=NSMakePoint(0.0,NSMaxY([[scrollview documentView] frame])
                                        -NSHeight([[scrollview contentView] bounds]));
    }



      [[scrollview documentView] scrollPoint:newScrollOrigin];
}

1 个答案:

答案 0 :(得分:2)

好吧,我找到了解决方案:

NSRect insertionRect=[[self layoutManager] boundingRectForGlyphRange:[self selectedRange] inTextContainer:[self textContainer]];
NSPoint scrollPoint=NSMakePoint(0,insertionRect.origin.y+insertionRect.size.height+2*scrolling-[[NSScreen mainScreen] frame].size.height);
[self scrollPoint:scrollPoint];

其中textView是textview的IBOutletscrolling是应该设置插入点的底部的距离(以像素为单位)。只需使用它来了解它是如何工作的。