如何获得约束是在layoutSubviews之前的ios8?

时间:2015-04-29 07:12:37

标签: ios objective-c

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

@Html.DropDownList("Forms", ViewBag.Forms as SelectList, new { @class = "form-control ", placeholder = "Select", multiple = "multiple" })

2 个答案:

答案 0 :(得分:0)

您的xib是否关闭了AutoLayout?

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

2015-04-29 00:30:48.796 simpletest[37423:4105842] constraints = (
)

如果我重新打开AutoLayout,我会得到一个约束列表:

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的复选框位于此图片的底部附近: enter image description here

重读你的帖子,看起来你实际上是在添加了如果你关闭了AutoLayout就无法做到的约束。所以也许这不是你的问题。但是,正如您从输出中看到的那样,当存在约束时,iOS8不会为self.constraints返回nil。

答案 1 :(得分:0)

首先,您应该考虑将逻辑移至awakeFromNib。这是所有nibs / xib的起点。例如,initWithCoder尚未加载IBOutlets。

其次,请记住,当您相对于其他兄弟节点添加约束时,父节点是持有约束的节点。因此,如果A对B具有水平约束,则约束将在A.superview.constraints中。

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