我现有的 Mac 应用程序使用 Springs 和 Struts 并且运行良好,但我想在我的一个 NIB 内的单个视图中使用“自动布局”。我将以编程方式提供这些约束(因为使用 IB 配置约束是一场彻头彻尾的噩梦)。
我的问题是NSLayoutConstraint
,当它包含在未选中“使用自动布局”的 NIB 中时,我可以在视图上设置对象吗?
我现有的 Mac 应用程序使用 Springs 和 Struts 并且运行良好,但我想在我的一个 NIB 内的单个视图中使用“自动布局”。我将以编程方式提供这些约束(因为使用 IB 配置约束是一场彻头彻尾的噩梦)。
我的问题是NSLayoutConstraint
,当它包含在未选中“使用自动布局”的 NIB 中时,我可以在视图上设置对象吗?
好的,所以这个问题的简短回答是“是”,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
该滚动视图,否则会引发异常。