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

标签 objective-c cocoa nswindow

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

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

我一直在尝试很多关于获取边界和设置框架的事情,但一直很困惑。

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

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

谢谢

最佳答案

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

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

要执行您想要的操作,您需要获取 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/

相关文章:

ios - NSPredicate 不会工作?

ios - 将按钮添加到 UINavigationController 子类

objective-c - 如何从代码中定义绑定(bind)的对象访问 Cocoa IB 绑定(bind)?

cocoa - 如何更改 NSWindow 出现的 NSScreen

ios - 在 NSAttributedString 文本下绘制稀松布 ("Blurry Transparent Rectangle")

objective-c - Objective C 中硬编码字节的奇怪结果

cocoa - 在 NSScrollView 中展开 documentView

iphone - 如何使用 Quartz 和 CGLayers 在背景上绘制 Sprite ?

objective-c - 如何让按钮在单击时显示一个窗口?

cocoa - 从顶部调整 NSWindow 的大小