在NSScrollView中居中NSView

rho*_*bus 9 macos cocoa objective-c nsview nsscrollview

如何像在"预览"中一样将NSView置于NSScrollView中心?

nal*_*all 11

滚动到特定位置时,请阅读" 滚动视图编程指南"部分.有顶部或底部的例子.您只需更改数学以根据NSView的中间位置计算原点.就像是:

-(void)scrollToCenter:(NSScrollView*)scrollView
{
    const CGFloat midX = NSMidX([[scrollView documentView] bounds]);
    const CGFloat midY = NSMidY([[scrollView documentView] bounds]);

    const CGFloat halfWidth = NSWidth([[scrollView contentView] frame]) / 2.0;
    const CGFloat halfHeight = NSHeight([[scrollView contentView] frame]) / 2.0;

    NSPoint newOrigin;
    if([[scrollView documentView] isFlipped])
    {
        newOrigin = NSMakePoint(midX - halfWidth, midY + halfHeight);
    }
    else
    {
        newOrigin = NSMakePoint(midX - halfWidth, midY - halfHeight);
    }

    [[scrollView documentView] scrollPoint:newOrigin];
}
Run Code Online (Sandbox Code Playgroud)

  • 当文档视图小于滚动视图时,这不起作用.文档视图固定在左下角(如果翻转则为左上角). (4认同)