【问题标题】:resizing an NSPanel to fit a dynamic NSMatrix and a button调整 NSPanel 的大小以适应动态 NSMatrix 和按钮
【发布时间】:2009-09-03 18:24:48
【问题描述】:

我有一个用一些表单项动态填充的 NSMatrix。现在,我可以方便地调用[theMatrix sizeToCells],然后将其传递到要显示的面板中。

现在,我希望包含此 NSMatrix 的 NSPanel 对象调整大小以很好地环绕它。 NSPanel 底部还有一个按钮,应该在 NSMatrix 下方。

我一直在尝试获取边界和设置框架,但一直很困惑。

是否有任何标准或正确的方法可以根据内容调整面板的大小?

作为一个附带问题:框架的原点是指它的左上角还是左下角?总是一致的吗?

谢谢

【问题讨论】:

    标签: objective-c cocoa nswindow


    【解决方案1】:

    NSPanel/NSWindow 框架的原点始终是左下角,它是从屏幕原点开始测量的。

    视图的原点是左上角还是左下角取决于它的父视图是否翻转。翻转视图的边界原点位于左上角。

    要做你想做的,你需要得到NSMatrix的frame size,然后重新计算panel的布局。

    类似这样的东西(写在这里,未经测试!):

    //NSMatrix* matrix;
    //NSPanel* panel;
    CGFloat panelMargin = 10.0;
    CGFloat matrixBottomMargin = 30.0;
    
    [matrix sizeToCells];
    NSRect matrixFrame = [matrix frame];
    
    NSRect panelFrame = [panel frame];
    
    NSSize newPanelSize = NSMakeSize(NSWidth(matrixFrame) + 2.0 * panelMargin, 
                    NSHeight(matrixFrame) + 2.0 * panelMargin + matrixBottomMargin);
    
    CGFloat yDelta = newPanelSize.height - NSHeight(panelFrame);
    
    panelFrame = NSMakeRect(panelFrame.origin.x, 
                            panelFrame.origin.y - yDelta, 
                            newPanelSize.width, 
                            newPanelSize.height);
    [panel setFrame:panelFrame display:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2016-11-24
      • 2013-06-04
      • 2016-02-28
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      相关资源
      最近更新 更多