2016-06-28 186 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中的約束? –