AutoLayout无法使用嵌入式Xib文件

时间:2016-06-01 19:02:16

标签: ios swift

我有一个带有标签的笔尖,它使用自动布局垂直和水平居中。我声明了UIView的子类并在其中加载了nib文件。

然后我向我的主视图控制器添加了UIView并为其分配了新的子类。问题是nib文件的标签不是以视图为中心,它不遵循AutoLayout约束。

enter image description here

Download test project.为什么会这样?

2 个答案:

答案 0 :(得分:4)

以下是您应该如何编写自定义类:

import UIKit

class CustomView: UIView {

    @IBOutlet var view: UIView!

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        view = NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil).first as! UIView
        view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        view.translatesAutoresizingMaskIntoConstraints = true
        view.frame = bounds
        self.addSubview(self.view)
    }
}

这是一个有效的例子:

Testxibautolayout2.zip

答案 1 :(得分:3)

在以编程方式加载xib时,它采用在storyboard中设计的xib的原始帧大小,即600x600。在加载xib后,创建自定义视图的出口属性并更改其框架! -

在你的情况下,你必须这样做:

import UIKit

class CustomView: UIView {

    @IBOutlet var testView: UIView!

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil)
        self.addSubview(self.testView)
        self.testView.frame=CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)
        //or
        self.testView.frame=self.bounds
    }
}