2014-07-11 19 views
6

Vì vậy, tôi đang sử dụng UICollectionView dưới AutoLayout bảng phân cảnh đã bật. Tôi đang cố gắng đặt kích thước ô dựa trên collectionView chính nó và dựa trên phương pháp [collectionView: layout: sizeForItemAtIndexPath:]. collectionView cũng phụ thuộc vào bố cục tự động và kích thước sai ở lần đầu tiên (tôi giả định đây là trước khi xem được bố cục). Tôi biết rằng họ sẽ có kích thước chính xác sau khi phương thức viewDidLayoutSubviews được gọi nhưng nó khiến tải lại hai lần các mặt hàng collectionView khiến giao diện người dùng ổn định vào thời gian chạy.Kích thước ô xem UICollectionView trong AutoLayout

Dưới đây là [collectionView: layout: sizeForItemAtIndexPath:] phương pháp triển khai của tôi.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize innerSize = CGSizeMake(galleryView.frame.size.width - 80, galleryView.frame.size.height - 40); 
    GLPhotoAsset *photo = [(PCOpticsPhotoPoint *)_cluster.points[indexPath.row] photo]; 
    CGFloat ratio = MIN(innerSize.width/photo.size.width, innerSize.height/photo.size.height); 

    return CGSizeMake(photo.size.width * ratio, photo.size.height * ratio); 
} 
+0

"Tôi đang cố gắng đặt kích thước ô dựa trên collectionView" Không theo dõi bạn ở đây? –

+0

@KyleTruscott Tôi đang tính toán và trả về kích thước ô dựa trên collectionView trong phương thức [collectionView: layout: sizeForItemAtIndexPath:]. Vấn đề là phương pháp này được gọi trước khi tự động bố trí được thực hiện. – Pei

+0

Bạn có nói rằng kích thước của các tế bào của bạn là "liên quan" để rect của tổng quan bộ sưu tập? Có lẽ bạn nên đăng bài thực hiện của bạn '[collectionView: layout: sizeForItemAtIndexPath:]' –

Trả lời

1

Đảm bảo rằng thuộc tính Clip Subviews của bạn được chọn. . . .

Và bộ sưu tập của bạnXem ô thuộc tínhSize phải phù hợp trong Kích thước & Mục vị trí. . .

Có thể điều này sẽ giúp bạn. . .

0

Như bạn đang nhận được một kích thước bố trí sai trước sizeForItemAtIndexPath: được gọi là, kịch bản sau đó goto và kiểm tra kích thước tế bào đưa ra cho những 3 - CollectionView, CollectionViewCellCollectionViewFlowLayout

Làm cho chúng giống nhau. (cũng làm cho kích thước tương ứng với kích thước xem bộ sưu tập mặc định, như u yêu cầu)

Các vấn đề liên quan