2017-03-25 131 views
1

在自動佈局完成後,我一直在這個問題上停留在想要設置CALayer中的CALayer的框架,圓角半徑和其他操作。但令我驚訝的是,細胞和它的contentView的子視圖出現(0.0, 0.0, 0.0, 0.0)每次layoutSubviews()在細胞的子類中被調用。我終於找到了這個問題的解決方案,併發布它,所以如果你面臨類似的問題,每個人都可以看看這個問題。UICollectionViewCell的子視圖的寬度和高度爲零

回答

1

我一直在敲我的頭一個多星期了,但最後!這是完美的工作對我來說:

落實UICollectionViewDelegatecollectionView(_:willDisplay:forItemAt:)功能並觸發該小區的collectionView即將展示的contentView新的佈局循環。

斯威夫特:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
    cell.contentView.setNeedsLayout() 
    cell.contentView.layoutIfNeeded() 
} 

的Objective-C:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell.contentView setNeedsLayout]; 
    [cell.contentView layoutIfNeeded]; 
} 

這看起來似乎是很煩瑣的操作,但每一個集合視圖中插入一個新的單元,並執行自動佈局的時候,在初始佈局週期之後,單元的frame s通常是(0.0, 0.0, 0.0, 0.0)(如在layoutSubviews()中所觀察到的)但是如果在單元格大約出現在屏幕上之前手動觸發了佈局,則在layoutSubviews()中觀察到的子視圖的frame是您希望在自動佈局循環完成之後預期的內容。

請確保觸發自動佈局contentView而不僅僅是單元格本身此手動觸發器可能看起來很麻煩,但我得到的最好。

相關問題