2016-06-28 691 views
2

所以,我有以下XIB约束不尊重

enter image description here

时加载为tableviewcell看起来像这样

enter image description here

既然决定我有这个XIB我不需要TableView,所以我将我的XIB类从UITableViewCell更改为UIView。在视图控制器我将此代码添加到viewDidLoad中()

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

而且我得到了这个结果

enter image description here

正如你所看到的,它忽略了利润,并继续右侧(忽略红色,因为我用它来尝试和调试问题,没有图表数据也不是问题)。我已经打印了xib的框架宽度,并且我已经看到它比屏幕大小要大很多,但是我无法修复它。任何人都可以找出问题所在?

回答

2

当您以编程方式添加一个子视图,你还应该添加子视图和它的父

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

通过在添加子视图时指定确切的大小或以编程方式在MyChartView实例与其超级视图之间添加约束,您没有限制MyChartView实例的宽度。如果不做这些或这些其中一个,视图的尺寸将与xib中的任何尺寸匹配。

+0

我试图改变MyChartView实例的边框与屏幕相匹配之间的约束,但它并没有区别。我将尝试以编程方式添加约束。但为什么这个问题不会发生在tableview中? –

+2

我建议确保'MyChartView'的'translateResizingMaskToConstraints'是'false',并且你添加了约束(不仅仅是设置'frame')来决定它在它的超级视图中的位置。 NRitH可能是对的,虽然你的NIB本身可能有限制,但它本身和它的超级观点之间没有任何关系。如果仍有问题,则必须编辑问题以向我们显示以编程方式添加的约束,然后使用视图调试器或lldb向我们展示运行时的约束条件。 – Rob

+0

我明白你们的意思了,我已经接受了Anil Varghese的回答,因为他有一个例子。我仍然不明白为什么它在tableview中正常工作。它是否推断tableview中的约束? –