2014-01-25 62 views
2

我在代碼中添加了一個高度佈局約束到我的UICollectionViewCell子類,該子類根據文本的長度設置高度。 See this question.我可以發佈代碼的高度計算,但我不認爲這是問題,因爲它適用於前4個單元格,但然後在第5個單元格上崩潰。Autolayout由於額外的高度限制而崩潰

@property (weak, nonatomic) UILabel *name; 

這是我如何創建約束。

NSLayoutConstraint *labelHeightContraint = [NSLayoutConstraint constraintWithItem:self.name attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:labelSize.height]; 
[self.name addConstraint:labelHeightContraint]; 

這是我得到的錯誤。

Unable to simultaneously satisfy constraints. 

(
    "<NSLayoutConstraint:0x9ff8770 V:[UILabel:0x9ff72d0(60.843)]>", 
    "<NSLayoutConstraint:0x9feb590 V:[UILabel:0x9ff72d0(40.562)]>" 
) 

看來我有2個身高限制,這對我沒有意義。在界面構建中我沒有高度限制(請參見屏幕截圖)。 Label Screenshot

在崩潰前顯示約束條件顯示高度約束條件。

<__NSArrayM 0x9eb0a00>(
<NSLayoutConstraint:0x9ea1670 V:[UILabel:0x9eb2e30(60.843)]>, 
<NSContentSizeLayoutConstraint:0x9fa0580 H:[UILabel:0x9eb2e30(72)] Hug:251 CompressionResistance:750>, 
<NSContentSizeLayoutConstraint:0x9fa7bf0 V:[UILabel:0x9eb2e30(61)] Hug:251 CompressionResistance:750> 
) 

我計算的約束是

<NSLayoutConstraint:0x9ea9b50 V:[UILabel:0x9eb2e30(40.562)]> 

回答

0

UICollectionView重用所有它的UICollectionViewCell實例。當一個被帶到離屏幕,它被再利用。不同的細胞需要不同的高度,因此每個細胞的高度限制是不同的。當單元重新使用時,高度約束沒有被移除,所以這是造成多個高度約束和崩潰的原因。

解決方案是不使用自動佈局,只是修改框架(是的,我試圖刪除高度約束,沒有工作)。

CGRect labelFrame = self.name.frame; 
    labelFrame.size.height = labelSize.height; 
    self.name.frame = labelFrame; 
0

剛剛嘗試建立優先級爲每個約束

+0

你的答案應該包括一些鏈接幫助或代碼,甚至一些解釋。這不能被當作答案 –

+0

這個簡單的與UILabel的'height'有衝突的'CompressionResistance'。這位作者需要玩冗餘 – Bimawa

+0

我以前試過這個,它停止了崩潰但沒有解決問題。 – Kevin

相關問題