0

我现有的 Mac 应用程序使用 Springs 和 Struts 并且运行良好,但我想在我的一个 NIB 内的单个视图中使用“自动布局”。我将以编程方式提供这些约束(因为使用 IB 配置约束是一场彻头彻尾的噩梦)。

我的问题是NSLayoutConstraint,当它包含在未选中“使用自动布局”的 NIB 中时,我可以在视图上设置对象吗?

4

1 回答 1

0

好的,所以这个问题的简短回答是“是”,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];
  • 对于所有使用自动布局约束的子视图,您需要停止 Springs 和 Struts 的翻译。
  • 另一个拆分视图窗格中有一个滚动视图,我必须调用setTranslatesAutoresizingMaskIntoConstraints:NO该滚动视图,否则会引发异常。
于 2013-01-23T20:16:38.330 回答