【问题标题】:Center an NSView within an NSScrollView在 NSScrollView 中居中 NSView
【发布时间】:2009-11-20 23:39:21
【问题描述】:

如何像“预览”一样在 NSScrollView 中居中 NSView?

【问题讨论】:

    标签: objective-c cocoa macos nsview nsscrollview


    【解决方案1】:

    阅读Scroll View Programming Guide 关于滚动到特定位置的部分。有顶部或底部的示例。您只需更改数学以根据 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];
    }
    

    【讨论】:

    • 这在文档视图小于滚动视图时不起作用。文档视图固定在左下角(如果翻转,则固定在左上角)。
    【解决方案2】:

    在斯威夫特中:

    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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      相关资源
      最近更新 更多