Ios 如何在布局子视图之前获取约束?

Ios 如何在布局子视图之前获取约束?,ios,objective-c,Ios,Objective C,我有一个视图,它是UIView的子类,当我在xib中添加约束时,现在我应该得到数组约束,我试过了,但在iOS 7和iOS 8之间是不同的。 它适用于iOS 7,iOS 8无效 -(id)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if (self) { NSLog(@"constraints = %@",self.constraints); } retu

我有一个视图,它是UIView的子类,当我在xib中添加约束时,现在我应该得到数组约束,我试过了,但在iOS 7和iOS 8之间是不同的。 它适用于iOS 7,iOS 8无效

-(id)initWithCoder:(NSCoder *)aDecoder{

   self = [super initWithCoder:aDecoder];
   if (self) {

    NSLog(@"constraints = %@",self.constraints);
    }
    return self;
}

您的xib是否已关闭自动布局

如果我在iOS8上运行我的一个项目,并关闭AutoLayout,我会得到:

2015-04-29 00:30:48.796 simpletest[37423:4105842] constraints = (
)
如果重新启用“自动布局”,则会得到一个约束列表:

2015-04-29 00:32:03.755 simpletest[37448:4107364] constraints = (
    "<NSLayoutConstraint:0x7a694c90 V:[_UILayoutGuide:0x7a87f280]-(0)-[UIButton:0x7a6834a0'Another View']>",
    "<NSLayoutConstraint:0x7a691b90 UIButton:0x7a6834a0'Another View'.leading == UIView:0x7a87ef50.leadingMargin>",
    "<NSLayoutConstraint:0x7a6871c0 V:[UIButton:0x7a6834a0'Another View']-(100)-[UIView:0x7a87f0f0]>",
    "<NSLayoutConstraint:0x7a696670 UIView:0x7a87f0f0.leading == UIView:0x7a87ef50.leadingMargin + 30>",
    "<NSLayoutConstraint:0x7a691bf0 UIView:0x7a87ef50.trailingMargin == UIView:0x7a87f0f0.trailing + 30>",
    "<NSLayoutConstraint:0x7a686620 V:[UIView:0x7a87f0f0]-(100)-[_UILayoutGuide:0x7a87f950]>",
    "<_UILayoutSupportConstraint:0x7a68d8f0 V:[_UILayoutGuide:0x7a87f280(0)]>",
etc.
用于打开或关闭自动布局的复选框位于该图像底部附近:


重读你的文章,看起来你实际上是在添加约束,如果你关闭了AutoLayout,你就不能这么做。所以这可能不是你的问题。但是,正如您从我的输出中看到的,当有约束时,IOS8不会返回Self.NIL的NIL。首先,您应该考虑将逻辑移动到AuxKeFiNib。这是所有NIB/XIB的起点。例如,initWithCoder尚未加载IBOutlets

其次,请记住,当您添加相对于其他同级的约束时,父级是否就是保存该约束的父级。因此,如果A对B具有水平约束,则该约束将位于A.superview.constraints中


但是,如果A没有基于高度或宽度等其他视图的约束,则可以在A.constraints中找到它们

我不知道视图生命周期中何时添加约束。可能不在initWithCoder中,但稍后在iOS8中?我在xib中添加了约束,它在加载视图时调用initWithCoder。有什么区别吗?在iOS 8中数组是nil。在awakeFromNib中是nil还是viewdide中是nil?我猜在iOS8和initWithCoder中设置视图的优先级已经改变,现在要求约束还为时过早。不,如果我关闭它,我就不会添加约束。你确定你是在initwihtCoder方法中打印的吗?哦,这是我的错,这是一个空数组。为什么要在布局子视图之前获取共约束?因为我想获取textview的原始高度,然后在用户输入时限制textview的高度。然后,我今天早上的响应可能会对您有所帮助。请看一看解释如何使TextVieww调整内容大小的部分