我正在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];
}
答案 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的IBOutlet
,scrolling
是应该设置插入点的底部的距离(以像素为单位)。只需使用它来了解它是如何工作的。