2016-03-04 77 views
1

我的故事板中有一個靜態的UITableView,它具有系統單元和自定義單元的組合。爲了使自定義單元格看起來像系統單元格,我從UILabel的前面向單元格的contentView添加了一個15點約束(以匹配15個點的默認分隔符插入點)。UITableViewCell在UITableViewCell中的UILabel約束條件變化

這種策略效果很好,當表視圖是縱向的,但它看起來像限制,如下圖所示,在景觀時收縮:

肖像: System cell alongside custom cell in portrait

景觀: System cell alongside custom cell in landscape

您可以在上圖中看到「BUG REPORTING」部分標題,「Report a Bug」標籤(由系統單元定位),並且兩個單元格之間的連線距離contentView的左側均爲15點,但「L ogging「標籤更接近。

我試着用margin和on關閉contentView的標籤,結果是一樣的。當自定義標籤的約束與contentView左側的距離明顯相同時,甚至會報告不同的常量值。

Example of constraint information when constrained to margin

Example of constraint information when not constrained to margin

有誰知道這是怎麼回事?

+0

在您的第一張圖片中,您的值爲7,請問您能解釋一下嗎? –

+0

當然。餘量設置爲8,所以通過將餘量限制爲7,我可以得到所需的15點偏移量。 – Mark

+0

看來,當您將設備旋轉到橫向模式時,默認單元格標籤的左側填充增加。這可能是當設備處於portraint模式時,textLable的左側填充爲15pts,橫向模式下爲20pts。您可以創建標籤領先空間約束的出口,並在viewWillRotate:method中更新其值。另請參閱Vignesh答案。 –

回答

2

嘗試爲標籤的主要約束的IBOutlet,並修改它顯示之前的細胞:

func tableView(_ tableView: UITableView, willDisplayCell cell: UITableViewCell, 
    forRowAtIndexPath indexPath: NSIndexPath) { 
     let leftInset = cell.separatorInset.left 
     cell.labelLeadingConstraint.constant = leftInset - 8 
     // - 8.0 accounts for constraint to margins in autolayout 
} 

或者,你可以使用大小類設定不同的約束條件爲緊湊型身高尺寸級別:

Compact height size class

然後,只需設置的約束常量至12,而不是如圖7(或20而不是15,如果不使用邊距)。

+0

這是正確的想法(除了'awakeFromNib'選項外,因爲只有當單元格從Storyboard第一次被加載時才被調用)。我會編輯你的答案,還包括我用來解決它的方法,並接受它。 – Mark

+0

很酷。謝謝你的另一種方式。 – UIResponder