Objective c 将NSView居中放置在NSScrollView中

Objective c 将NSView居中放置在NSScrollView中,objective-c,cocoa,macos,nsview,nsscrollview,Objective C,Cocoa,Macos,Nsview,Nsscrollview,如何像“预览”一样在NSScrollView中居中显示NSView?阅读有关滚动到特定位置的部分。这里有关于顶部或底部的例子。您只需更改数学,根据视图的中间部分计算原点。比如: -(void)scrollToCenter:(NSScrollView*)scrollView { const CGFloat midX = NSMidX([[scrollView documentView] bounds]); const CGFloat midY = NSMidY([[scrollVi

如何像“预览”一样在NSScrollView中居中显示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];
}
迅速:

extension NSScrollView {
    func scrollToCenter() {
        guard let docView = documentView else { return }
        let center = CGPoint(
            x: docView.bounds.midX - contentView.frame.width / 2,
            y: docView.bounds.midY - (docView.isFlipped ? -1 : 1) * contentView.frame.height / 2
        )
        docView.scroll(center)
    }
}

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