2009-09-03 52 views
0

我有一个动态填充某些表单项的NSMatrix。现在,我可以方便地调用[theMatrix sizeToCells],然后将其传递到要显示的面板。调整NSPanel的大小以适合动态NSMatrix和按钮

现在,我想包含此NSMatrix的NSPanel对象调整大小,以很好地包裹它。 NSPanel在底部也有一个按钮,它应该在NSMatrix下。

我一直在尝试很多事情来获取边界和设置框架,一直有很多困惑。

是否有任何标准或正确的方式来确定面板的内容?

作为一个侧面的问题:框架的来源是指左上角还是左下角?它总是一致的吗?

由于

回答

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]; 
相关问题