私の既存のMacアプリはSpringsとStrutsを使用していてうまく機能しますが、NIBの1つ内の単一のビューで「自動レイアウト」を使用したいと思います。これらの制約をプログラムで提供します(IBを使用して制約を構成することは完全な悪夢であるため)。
私の質問はNSLayoutConstraint
、「自動レイアウトを使用する」がオフになっているNIBにオブジェクトが含まれている場合に、ビューにオブジェクトを設定できますか?
私の既存のMacアプリはSpringsとStrutsを使用していてうまく機能しますが、NIBの1つ内の単一のビューで「自動レイアウト」を使用したいと思います。これらの制約をプログラムで提供します(IBを使用して制約を構成することは完全な悪夢であるため)。
私の質問はNSLayoutConstraint
、「自動レイアウトを使用する」がオフになっているNIBにオブジェクトが含まれている場合に、ビューにオブジェクトを設定できますか?
OK、この質問に対する簡単な答えは「はい」ですNSLayoutConstraint
。NIBで[自動レイアウトの使用]がオフになっている場合でも、sを使用できます。
これは私の見解のawakeFromNib
方法です:
- (void)awakeFromNib
{
NSDictionary *viewsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
_field1, @"field1",
_field2, @"field2",
_field3, @"field3",
nil];
// Turn off conversion of Springs and Struts into NSLayoutConstraints for all the controls
for (NSControl *control in [viewsDictionary allValues])
{
[control setTranslatesAutoresizingMaskIntoConstraints:NO];
}
NSString *hformat = @"H:|-4-[field1(>=48)]-[field2]-[field3(==field1)]-4-|";
NSArray *hconstraints = [NSLayoutConstraint constraintsWithVisualFormat:hformat
options:0
metrics:0
views:viewsDictionary];
[self addConstraints:hconstraints];
// Vertical layout (must be done for each control separately)
for (NSString *controlName in [viewsDictionary allKeys])
{
NSString *vformat = [NSString stringWithFormat:@"V:|-4-[%@]", controlName];
NSArray *vconstraints = [NSLayoutConstraint constraintsWithVisualFormat:vformat
options:0
metrics:0
views:viewsDictionary];
[self addConstraints:vconstraints];
}
}
// Other init
}
いくつかのメモ:
[self setTranslatesAutoresizingMaskIntoConstraints:NO];
setTranslatesAutoresizingMaskIntoConstraints:NO
そのスクロールビューを呼び出す必要がありました。そうしないと、例外が発生しました。