3

mail.app のような自動レイアウト制約により、3 つのサブビューで分割ビューを構成することは可能ですか? つまり、ユーザーがウィンドウのサイズを変更すると、右端のサブビューのみがサイズを変更し、ユーザーが左端と中央のサブビューの間の仕切りをドラッグすると、左右のサブビューのみがサイズを変更し、ユーザーが中央と中央の間の仕切りをドラッグすると、これらのサブビューのみがサイズを変更します。できればやり方。このタスクは制約の優先順位によって実行される可能性があると思いますが、それと混同しました。ありがとう!

4

2 に答える 2

1

自動レイアウト制約を使用せずに解決策を見つけました。私は Rubymotion を使用しているため、私のソリューションは Ruby ですが、Objective-C に簡単に変換できます。

まず、ユーザーが左と中央のサブビューの間の仕切りをドラッグしたときに、左と右のサブビューのみのサイズを変更するために、2 つのネストされた を作成NSSplitViewしました。

質問で言及されている最後のポイントは、つまり、ここでは何もしないwhen the user drags the divider between the middle and the right subviews only these subviews change sizeのデフォルトの動作です。NSSplitView

最後に、ユーザーがウィンドウのサイズを変更したときにサイズを変更する右端のサブビューのみを取得するために、splitView:resizeSubviewsWithOldSize:デリゲート メソッドを実装しました。

def splitView(splitView, resizeSubviewsWithOldSize:oldSize)
  sv1 = splitView.subviews[0]
  sv2 = splitView.subviews[1]

  leftFrame = sv1.frame
  rightFrame = sv2.frame
  newFrame = splitView.frame

  leftFrame.size.height = newFrame.size.height
  rightFrame.size.height = newFrame.size.height

  leftFrame.origin = NSMakePoint(0,0)
  ## 1 is the NSSplitView divider width
  rightFrame.size.width = newFrame.size.width - leftFrame.size.width -  1
  rightFrame.origin.x = leftFrame.size.width + 1

  sv1.setFrame(leftFrame)
  sv2.setFrame(rightFrame)
end

そしてほら!機能させるのに時間がかかったので、他の人の時間を節約できることを願っています.

于 2013-09-19T13:46:00.373 に答える
0

自動レイアウトを使用すると、NSSplitView で各仕切りの保持優先度を設定できます。これは、コードでデリゲート メソッドを使用するか、Xcode のインターフェイス ビルダーで行うことができます。

于 2013-09-19T13:52:14.493 に答える