2

我正在使用 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];
}
4

1 回答 1

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 是IBOutlet到 textview 并且scrolling是距应设置插入点的底部的距离(以像素为单位)。只是玩弄它以了解它是如何工作的。

于 2011-05-25T18:47:55.847 回答