从 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]))
所以,我有以下 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]))