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

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

我一直在尝试做很多事情来限制和设置框架,并且一直感到困惑。

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

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

谢谢

最佳答案

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

关于objective-c - 调整NSPanel的大小以适合动态NSMatrix和按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1375105/

10-09 13:18