将约束添加到xib中的“主视图”

时间:2014-07-02 09:27:58

标签: ios objective-c xcode autolayout xib

我在.xib文件中定义了UIView。我需要设置translatesAutoresizingMaskIntoConstraints = NO。这意味着框架没有转换为约束,所以我需要自己设置尺寸约束。

我为UIView创建了一个工作类别方法:

-(NSArray*)setSizeConstraints:(CGSize)size
{
    NSLayoutConstraint* height = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1  constant:size.height];
    NSLayoutConstraint* width = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1  constant:size.width];

    [self addConstraint:height];
    [self addConstraint:width];

    return [NSArray arrayWithObjects:height, width, nil];
}

但我想从Xcode界面构建器设置这些约束,但我的所有AutoLayout控件都是灰色的: Xcode interface builder

有没有办法在界面构建器中执行此操作?

2 个答案:

答案 0 :(得分:2)

这实际上是可能的。

只需将您想要约束的视图放入另一个视图中,例如此处突出显示的视图。 enter image description here

然后,添加您想要的约束。

最后,将您刚刚添加约束的视图拉到其父视图的 out 。您现在可以向该视图添加约束。

enter image description here

答案 1 :(得分:0)

正如您现在已经发现的那样,看起来目前无法在Interface Builder的主UIView级别设置Autolayout约束。

在使用我的应用的启动画面时,我遇到了类似的问题(Launch Screen XIB: Missing Width / Height Constraints (Xcode 6))。

如果您想继续与IB合作,我发现的唯一解决方法是:

  • 在XIB中使用UIViewController及其UIView,而不仅仅是UIView
  • 仅使用故事板(并再次使用UIViewController

但是,我知道这些方法可能不理想或“干净”,特别是如果你只是有一个UIView的子类,并且你想在一个好的旧XIB中绘制它的接口。