从 XIB 加载时不遵守约束

Constraints not respected when loading from XIB

所以,我有以下 XIB

这个 XIB 在作为 tableviewcell 加载时看起来像这样

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

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

结果我得到了这个

如您所见,它忽略了边距并继续向右侧(忽略红色,因为我用它来尝试调试问题。没有图表数据也不是问题)。我已经打印了 xib 的框架宽度,我发现它比屏幕尺寸大了很多,但我无法修复它。谁能解决问题?

您没有限制 MyChartView 实例的宽度,方法是在添加子视图时指定确切的大小,或者以编程方式在 MyChartView 实例及其父视图之间添加约束。如果不执行其中一个或另一个,视图的尺寸将匹配它们在 xib 中的任何尺寸。

当你以编程方式添加一个子视图时,你还应该在子视图和它的超视图之间添加约束

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]))