Xcode - xib和自动布局的奇怪问题(xib扩展到随机高度)

时间:2014-11-07 05:31:27

标签: ios swift height autolayout xib

我有一个奇怪的自动布局与xib文件/类问题。 我在Swift中创建了一个使用xib文件的自定义通知视图(UIView子类)。

  • 当设备在加载时处于纵向方向时,通知 很好。
  • 当我转向横向时,通知再次正常(但是, 按钮交互以某种方式变为禁用/不响应)
  • 当我旋转回纵向时,xib视图(即 " self")扩展到随机高度(注意"黄色" 背景,由下式设置: self.backgroundColor = UIColor.yellowColor()

我的代码中没有任何内容在初始添加到视图控制器后设置框架或约束。我已经调整了我能想到的xib文件中的每个自动布局约束,并继续遇到这个问题。

以下是一些截图: enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

尝试向视图添加高度约束。在您拥有的约束列表的末尾: - 垂直空间(我猜它是一个垂直空间到顶部 - 水平空间 - 水平空间 - 为视图添加高度约束,使其永远不会调整其高度

答案 1 :(得分:1)

好的解决了。 所以问题是,你不能在IB中从xib到外部UIViewController设置自动布局参考(因为在你以编程方式将xib添加为子视图之前,他们不会彼此了解)。所以你必须以编程方式创建约束。

我是这样做的:

    // Manual constraints required since view is a xib file being added to an external view controller
    self.setTranslatesAutoresizingMaskIntoConstraints(false)
    var constraintHeight = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 0, constant: 44)
    self.addConstraint(constraintHeight)
    var constraintWidth = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: self.presentingViewController?.view, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 1)
    self.presentingViewController?.view.addConstraint(constraintWidth)
    var constraintTop = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: underView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0)
    self.presentingViewController?.view.addConstraint(constraintTop)