2012-12-17 41 views
29

Tôi muốn sử dụng UICollectionView để hiển thị danh sách hình thu nhỏ có thể cuộn ngang, tuy nhiên, tôi muốn đây là một hàng duy nhất. Ở chế độ xem khác, tôi hiển thị hình thu nhỏ trong một số UICollectionView nhưng hình này cuộn theo chiều dọc và nằm trong một cột.UICollectionView: Một hàng hoặc cột

Hiện tại, cách tôi thực hiện việc này là thay đổi kích thước của chế độ xem chỉ đủ lớn cho một mục để tự động sửa và hoạt động, nhưng bây giờ tôi đang xử lý các mục có kích thước khác nhau. t làm việc nữa.

Làm cách nào để bạn hiển thị UICollectionView hiển thị một hàng hoặc cột?

Trả lời

25

Tôi đoán bạn đang sử dụng được xây dựng trong Flow Layout. Tuy nhiên, đối với trường hợp của bạn, bạn nên thực hiện một tùy chỉnh UICollectionView Layout. Làm cho nó lớp con của UICollectionViewFlowLayout và thêm mã này trong phương pháp init:

- (id)init { 
    if ((self = [super init])) { 
     self.scrollDirection = UICollectionViewScrollDirectionHorizontal; 
     self.minimumLineSpacing = 10000.0f; 
    } 
    return self; 
} 

Các minimumLineSpacing là chìa khóa để làm cho nó có một dòng ở đây.

Tôi hy vọng điều này sẽ hữu ích!

+0

bạn có biết cách này ảnh hưởng đến kích thước nội dung bên trong? Tôi đang cố gắng triển khai chế độ xem bộ sưu tập hàng đơn lẻ dưới dạng trang trình bày lên/bật lên và giới hạn nó ở kích thước nội tại tối thiểu cho một hàng duy nhất. Cảm ơn! –

+1

Trong trường hợp bất kỳ ai thắc mắc tại sao điều này không hiệu quả đối với họ và bạn đặt lớp từ bên trong bảng phân cảnh, hãy thử làm điều này bên trong - (id) initWithCoder: (NSCoder *) aDecoder {} thay vì – bitwit

+6

+1 - Một ghi chú là bạn không cần phải phân lớp cho điều này (ít nhất là tôi đã không). Khi khởi tạo chế độ xem bộ sưu tập của tôi, tôi đã thực hiện 'flow.minimumInterItemSpacing = CGFloat_Max;' – Logan

12

tôi thấy rằng việc thiết lập minimumLineSpacing chỉ cần thực hiện khu vực di chuyển của tôi thực sự lớn và thiết lập các minimumInteritemSpacing=big thực hiện giữ các mục trong một hàng di chuyển hoặc cột, tập trung ở giữa collectionview.

+0

@giorashc, điều này là bởi vì nó nằm ngang, vì vậy một hàng sẽ được đặt thẳng đứng trong trường hợp này. Do đó việc thiết lập một giá trị lớn cho minimumInterItemSpacing sẽ đòi hỏi nhiều không gian hơn là màn hình cao, và nó sẽ chia thành nhiều dòng, theo chiều ngang. –

9

Không có lý do thực sự để phân lớp nếu bạn có thể tin tưởng loại truyền.

((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f; 

Nếu bạn có bộ sưu tập của mìnhXem từ một ngòi, bạn cũng có thể chơi cùng với các tham số trong Thuộc tính và Trình kiểm tra kích thước.

Cùng đi với hướng cuộn.

0

Khi bạn bắt đầu UICollectionView, hãy chuyển số UICollectionViewFlowLayout sau trong tham số init.

Lưu ý: Bạn không cần phải tạo ra một lớp con của UICollectionViewFlowLayout

var collectionViewFlowControl = UICollectionViewFlowLayout() 
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal 

Đối với 0 px Spacing di động:

collectionViewFlowControl.minimumInteritemSpacing = 0; 
collectionViewFlowControl.minimumLineSpacing = 0; 

collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl) 
0
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init]; 
[layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; 

layout.minimumInteritemSpacing = 0; 
layout.minimumLineSpacing = 0; 


blendEffectCollectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 95, 320, 60) collectionViewLayout:layout]; 
[blendEffectCollectionView setDataSource:self]; 
[blendEffectCollectionView setDelegate:self]; 
[blendEffectCollectionView registerClass:[BlendModeCell class] forCellWithReuseIdentifier:@"cellIdentifier"]; 
[blendEffectCollectionView setBackgroundColor:[UIColor clearColor]]; 

[bottomActivityView addSubview:blendEffectCollectionView]; 
Các vấn đề liên quan