2009-09-03 10 views
0

NSMatrixには、いくつかのフォームアイテムで動的に埋め込まれたNSMatrixがあります。さて、[theMatrix sizeToCells]を呼んで、パネルに渡して表示させると便利です。ダイナミックNSMatrixとボタンに合うようにNSPanelのサイズを変更

ここでは、この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]; 
関連する問題