我有一个奇怪的自动布局与xib文件/类问题。 我在Swift中创建了一个使用xib文件的自定义通知视图(UIView子类)。
我的代码中没有任何内容在初始添加到视图控制器后设置框架或约束。我已经调整了我能想到的xib文件中的每个自动布局约束,并继续遇到这个问题。
以下是一些截图:
答案 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)