我正在尝试创建一个可重用的视图(xib)并在我的故事板中使用autolayout。问题是它似乎没有使用我在故事板上设置的约束。
所以我真正的基本IOS项目包含:
MyView类以正确的方式连接到xib文件:
import UIKit
class MyView: UIView {
@IBOutlet var View: UIView!
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("MyView", owner: self, options: nil)
self.addSubview(self.View);
}
}
在我的故事板中,我添加了一个带有2个简单高度/宽度约束的UIView(CustomClass = MyView)。当我运行应用程序时,视图的大小不会根据这些约束。它使用xib中的高度/宽度属性进行渲染。
有没有人知道如何让我的自定义视图符合我在故事板中设置的约束?
答案 0 :(得分:0)
当你用xib加载它的视图时,你是说你的UIView是用xib的高度和宽度渲染的吗?意思是,xib是你运行模拟器时唯一看到的东西?如果是这样,我认为简单的解决方案是创建一个加载xib的附加UIView。使NewView成为MyView的子视图,这样你就拥有MyView - > NewView(加载xib)。
很抱歉,如果这样的话。在没有看到它的情况下得到你的意思有点困难。也许会抛出一两个截图。会发布这个评论而不是答案,但我还没有声誉。
答案 1 :(得分:0)
这应该有帮助
var contentView = NSBundle.mainBundle().loadNibNamed("MyView", owner: self, options: nil)
contentView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.addSubview(contentView)
var constTop:NSLayoutConstraint = NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0);
self.view.addConstraint(constTop);
var constBottom:NSLayoutConstraint = NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0);
self.view.addConstraint(constBottom);
var constLeft:NSLayoutConstraint = NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0);
self.view.addConstraint(constLeft);
var constRight:NSLayoutConstraint = NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0);
self.view.addConstraint(constRight);