簡體   English   中英

如何計算從具有自動布局縱橫比約束的xib加載的UICollectionViewCell的大小?

[英]How can I calculate the size of a UICollectionViewCell loaded from a xib with autolayout aspect ratio constraints?

我有一個從xib加載並存儲在屬性中的UICollectionViewCell,以幫助計算集合視圖的單元格大小。 收集視圖始終只有一列,因此單元格的寬度根據用戶使用的電話(iphone 5/6/6 +)而變化。 xib的圖像視圖的縱橫比對於所有電話尺寸都必須保持恆定。

我遇到的問題源於此配置。 我似乎無法根據固定寬度使單元格大小達到我想要的方式。 我的sizeForItemAtIndexPath:方法看起來像這樣:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    self.sizingCell.frame.size.width = self.flowLayout.fullViewSectionSize.width;
    [self configureCell:self.sizingCell atIndexPath:indexPath];
    [self.sizingCell setNeedsLayout];
    [self.sizingCell layoutIfNeeded];
    CGSize size = [self.sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    return size;
}

我正在做我本來應該在屏幕外的單元格進行動態尺寸計算的內容,但是問題是,當調用layoutIfNeeded時,我的約束得到了一個無法滿足的約束異常,並且設置了一個額外的約束單元格的高度為其在xib中定義的高度。 系統從不打破我沒有添加的額外高度限制,因此,單元的高度始終是xib設計時視圖的這種錯誤高度。

我能以某種方式刪除導致此方法不起作用的無關緊要的約束嗎? 還有其他需要我設置的設置嗎? 我嘗試過關閉translatesAutoResizingMaskIntoConstraints也無濟於事。 如何根據涉及寬高比的約束條件使裝有xib的單元格確定其大小?

編輯:

如果您想了解我在說什么,請在此處的github存儲庫中匯總以下內容: https : //github.com/klundberg/Autolayout-CollectionViewExample

我通過一些解決方法解決了這個問題。

最初,我的xib是一個集合視圖單元,其子視圖是其中具有長寬比約束的圖像。 這與iOS添加到這些單元格的默認約束(名為“ UIView-Encapsulated-Layout-Height / Width”)相沖突。 我的解決方案是在單元格和我關心的布局視圖之間引入一個視圖級別,因此現在這是一個包含容器視圖的單元格,其中包含我的圖像視圖。 容器視圖沒有應用封裝的布局約束,因此如果我為其創建IBOutlet並在該視圖上調用systemLayoutSizeFittingSize:而不是設置其寬度后的contentView ,它將正確地計算高度而沒有約束沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM