Ios AutoLayout不使用嵌入的Xib文件

Ios AutoLayout不使用嵌入的Xib文件,ios,swift,Ios,Swift,我有一个带标签的笔尖,它使用自动布局垂直和水平居中。我声明了UIView的一个子类,并在其中加载了nib文件 然后,我向主视图控制器添加了一个UIView,并为其分配了新的子类。问题是nib文件的标签没有居中于视图,它没有遵循自动布局约束 为什么会发生这种情况?当您以编程方式加载xib时,它采用故事板中设计的原始xib帧大小,即600x600。创建自定义视图的outlet属性,并在加载xib后更改其框架 在您的情况下,您必须这样做: import UIKit class CustomView

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

然后,我向主视图控制器添加了一个
UIView
,并为其分配了新的子类。问题是nib文件的标签没有居中于视图,它没有遵循自动布局约束


为什么会发生这种情况?

当您以编程方式加载xib时,它采用故事板中设计的原始xib帧大小,即600x600。创建自定义视图的outlet属性,并在加载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
    }
}

当您以编程方式加载xib时,它将采用故事板中设计的原始xib帧大小,即600x600。创建自定义视图的outlet属性,并在加载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
    }
}

以下是编写自定义类的方法:

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)
    }
}
下面是一个工作示例:


以下是编写自定义类的方法:

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)
    }
}
下面是一个工作示例:


标签看起来像是以蓝色视图为中心。你还需要什么?你想让它居中到self.view吗?@TejaNandamuri问题是蓝色视图的宽度正好是superview大小的一半,因此标签没有居中,似乎有一个向右偏移。加载xib后,你必须手动更改其帧,并使其与蓝色视图框相等,蓝色视图框是超级视图框的一半!当您以编程方式加载xib时,它将采用故事板中设计的原始xib帧大小。创建自定义视图的outlet属性,并在加载xib后更改其框架@谢谢你。我试图找到一个方法来调用自定义视图来更新其框架。可能是
layoutifneed()
?标签看起来好像位于蓝色视图的中心。你还需要什么?你想让它居中到self.view吗?@TejaNandamuri问题是蓝色视图的宽度正好是superview大小的一半,因此标签没有居中,似乎有一个向右偏移。加载xib后,你必须手动更改其帧,并使其与蓝色视图框相等,蓝色视图框是超级视图框的一半!当您以编程方式加载xib时,它将采用故事板中设计的原始xib帧大小。创建自定义视图的outlet属性,并在加载xib后更改其框架@谢谢你。我试图找到一个方法来调用自定义视图来更新其框架。可能是
layoutifneed()