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