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

我有一个.xib文件中定义的UIView 。 我需要设置translatesAutoresizingMaskIntoConstraints = NO 。 这意味着框架不会被转换为约束,所以我需要自己设置大小约束。

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

 -(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的主UIView级别设置Autolayout约束。

我有一个类似的问题( 启动屏幕XIB:缺less宽度/高度限制(Xcode 6) ),而我的应用程序的启动屏幕的工作。

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

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

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

这实际上是可能的。

简单地把你想要限制的视图放到另一个视图中,比如这里突出显示的视图。 在这里输入图像说明

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

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

在这里输入图像说明