我现有的Mac应用程序使用Springs和Struts并且运行良好,但我想在我的一个NIB中的单个视图中使用“Auto Layout”。我将以编程方式提供这些约束(因为使用IB配置约束是一个完整的噩梦)。
我的问题是我可以在我的视图中设置NSLayoutConstraint
个对象,当它包含在未使用“使用Autolayout”的NIB中时吗?
答案 0 :(得分:0)
好的,所以对这个问题的简短回答是“是”即使NIB已关闭“使用自动布局”,也可以使用NSLayoutConstraint
。
这是我的观点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
,否则会引发异常。