2014-10-25 20 views
30

Tôi muốn tạo một UICollectionView theo phương thức horizontalScrolling flowLayout với EstimatedItemSize và preferredLayoutAttributesFittingAttributes trong ô. Nhưng có điều gì đó sai với tế bào cuối cùng. Bất kỳ ý tưởng đâu là vấn đề? Project itselfUICollectionView estimatedItemSize - ô cuối cùng không được căn chỉnh

enter image description here

@implementation RowCollectionView 

- (instancetype) initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout 
{ 
    if (self = [super initWithFrame:frame collectionViewLayout:layout]) 
    { 
     [self configureRowCollectionView]; 
    } 

    return self; 
} 

- (void) awakeFromNib 
{ 
    [super awakeFromNib]; 

    [self configureRowCollectionView]; 
} 

- (void) configureRowCollectionView 
{ 
    self.backgroundColor = [UIColor lightGrayColor]; 

    self.dataSource = self; 
    self.delegate = self; 

    // Horizontal Direction 
    UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionViewLayout; 
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; 

    // Estimated Item Size 
    flowLayout.estimatedItemSize = CGSizeMake(self.bounds.size.height, self.bounds.size.height); 


    [self registerClass:[RowCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class])]; 
} 

- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class]) forIndexPath:indexPath]; 

    cell.contentView.backgroundColor = [UIColor redColor]; 

    return cell; 
} 

@end 

@implementation RowCollectionViewCell 

- (UICollectionViewLayoutAttributes *) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes 
{ 
    [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; 

    UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy]; 

    attributes.size = CGSizeMake(80, 80); 

    return attributes; 
} 

@end  
+0

Hoàn toàn hoang mang vì sao đây là trường hợp: S – fatuhoku

+0

Mọi tin tức về điều này? – MrTJ

+0

m phải đối mặt với cùng một vấn đề ... đã làm để giải quyết nó? –

Trả lời

1

Bạn đang thiết estimatedItemSize trong init của bản thân xem.

Bạn cần đặt nó trong một số bộ điều khiển.

Ngoài ra,

Nếu tất cả các tế bào của bạn là cùng một chiều cao, sử dụng tài sản itemSize, thay vì tài sản này, để xác định kích thước tế bào để thay thế.

Tài liệu: estimatedItemSize

+1

Sự cố của tôi đã được xác định là lỗi của Bộ phận hỗ trợ nhà phát triển Apple. – artysx

+2

Bất kỳ tin tức nào về điều này? – jerrygdm

+1

Mọi tin tức? Cảm ơn! – chroman

1

có một phương pháp đơn giản để giải quyết này. Bạn có thể thêm số ô mẫu thử để kiểm tra ô ở vị trí cần thiết. Khi bạn tìm thấy sự cố ở ô cuối cùng. Kiểm tra các ô trong cửa sổ Thanh tra.

1

Bạn gọi phương thức siêu nhưng bạn không sử dụng bố cục siêu trả về thuộc tính.

[super preferredLayoutAttributesFittingAttributes:layoutAttributes]; 

Bạn có thể thử in bố cục gốcThuộc tính và bố cục của siêu Thuộc tính. Đôi khi, bạn không cần phải gọi chức năng siêu.

Thứ hai, bạn có thể tạo flowlayout tùy chỉnh hoặc đặt inset để cho ô của bạn căn chỉnh trên cùng. Tôi đã làm điều này trong dự án của tôi.

0

Bạn có thể coi đó là Đề xuất. Theo tôi chiều cao của UICollectionView cao hơn UICollectionViewCell Chiều cao, đó là lý do tại sao nó xảy ra. hãy làm cho chúng tương đương với chúng

0

Kích thước ô tùy chỉnh phải giống với kích thước của ô xem bộ sưu tập, vui lòng kiểm tra. Có thể giải quyết vấn đề cho bạn.

-1

Đã cùng một vấn đề và những gì sửa chữa nó trong trường hợp của tôi là để đảm bảo:

  1. Tất cả các tế bào chiều cao đều bình đẳng.

  2. Bộ sưu tập Chiều cao xem lớn hơn chiều cao ô + khoảng trống giữa các ô.

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