使用xib和storyboard的Autolayout不会使用我的约束

时间:2015-04-11 21:55:37

标签: ios storyboard autolayout constraints xib

我正在尝试创建一个可重用的视图(xib)并在我的故事板中使用autolayout。问题是它似乎没有使用我在故事板上设置的约束。

所以我真正的基本IOS项目包含:

  • MyView.swift
  • MyView.xib
  • Main.storyboard
  • ViewController.swift

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中的高度/宽度属性进行渲染。

有没有人知道如何让我的自定义视图符合我在故事板中设置的约束?

2 个答案:

答案 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);