调整NSPanel的大小以适应动态NSMatrix和按钮

时间:2009-09-03 18:24:48

标签: objective-c cocoa nswindow

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

现在,我希望包含此NSMatrix的NSPanel对象调整大小以便很好地包装它。 NSPanel底部还有一个按钮,位于NSMatrix下面。

我一直在尝试很多东西,但是我已经尝试了很多东西并且设置了框架并且一直存在很多困惑。

是否有任何标准或正确的方法来调整面板的大小?

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

由于

1 个答案:

答案 0 :(得分:1)

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

视图的原点是左上角还是左下角取决于其超级视图是否被翻转。翻转的视图的边界来自左上角。

要做你想做的事,你需要获得NSMatrix的帧大小,然后重新计算面板的布局。

像这样(写在这里,未经测试!):

//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];