从XIB加载时不遵守约束

时间:2016-06-28 16:02:22

标签: ios swift uiview constraints xib

所以,我有以下XIB

enter image description here

当作为tableviewcell加载时,此XIB看起来像这样

enter image description here

我决定不需要TableView,所以我将我的XIB类从UITableViewCell更改为UIView。在ViewController中,我将此代码添加到viewDidLoad()

var nView = MyChartView.instanceFromNib() as! MyChartView
self.view.addSubview(nView)

我得到了这个结果

enter image description here

正如您所看到的,它忽略了边距并继续向右侧(忽略红色,因为我使用它来尝试调试问题。没有图表数据也不是问题)。我已经打印了xib的框架宽度,我发现它比屏幕尺寸大得多,但我还是无法解决它。任何人都可以找出问题吗?

2 个答案:

答案 0 :(得分:3)

以编程方式添加子视图时,还应在subView及其superView

之间添加约束
var nView = MyChartView.instanceFromNib() as! MyChartView
self.view.addSubview(nView)
nView.translatesAutoresizingMaskIntoConstraints = false
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[nView]|", options:  [], metrics: nil, views: ["nView": nView]))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[nView]|", options: [], metrics: nil, views: ["nView": nView]))

答案 1 :(得分:1)

您还没有约束MyChartView实例的宽度,可以通过在添加子视图时指定确切的大小,也可以在MyChartView实例及其superview之间以编程方式添加约束。如果不执行其中一个操作,视图的尺寸将与xib中的任何尺寸相匹配。

相关问题