2

動的な幅と固定された間隔を持つ 2 つの NSTextFields の単純なケースと思われるものをまとめようとしています。私はそうする効果的な方法を理解することはできません。

私はこのようなものを取得しようとしています:

ゴール

青いボックスは NSTextFields です。より多くのテキストが一方に入力されると、それは拡大し、したがって他方は縮小し、先頭のスペース、末尾のスペース、およびフィールド間のスペースが維持されます。両方のフィールドにテキストが多すぎる場合は、最初のフィールドが優先されます。各フィールドには、到達可能な最大幅と最小幅も明確に設定されています。

例

できれば IB autolayout を可能な限り利用して、これを処理するにはどうすればよいでしょうか?

4

3 に答える 3

1

あなたが言及したすべての制約は、インターフェイスビルダーに直接変換されるように思えます-

  1. 最初のビューの幅は >= 何かです。
  2. 最初のビューの幅は <= 何か
  3. セカンドビューも同様。
  4. ビュー間のスペースは固定です。
  5. 2 番目のビューはできるだけ小さくしたい (幅を 0 にする) 必要がありますが、これは前の制約よりも優先度が低く、内部コンテンツ サイズの制約よりも優先度が低くなります。
于 2013-09-27T00:18:29.567 に答える
0

Ilyaの回答に従って制約を適用した後、View Controllerに追加する必要があったコード:

(は入力の固定幅制約controlTextDidChange_controlWidthConstraint参照します。2 番目の入力のデフォルトではおそらく 0 です):

// Get the new width that fits
float oldWidth = textControl.frame.size.width;
[input sizeToFit];
float controlWidth = textControl.frame.size.width;

// Don’t let the sizeToFit method modify the frame though
NSRect controlRect = textControl.frame;
controlRect.size.width = oldWidth;
textControl.frame = controlRect;

_controlWidthConstraint.constant = controlWidth;
于 2013-10-02T00:18:51.130 に答える
0

intrinsicContentSizeキーは、テキストが入力されたときにテキスト フィールドの を無効にすることにあります。

ここでサンプル プロジェクトをチェックして、正しい軌道に乗せることができます。

于 2015-03-11T22:42:55.093 に答える