2013-06-05 27 views
18

Khi UICollectionView là dân cư với mặt hàng mà họ luôn luôn đi đúng để các cạnh của UICollectionView như vậy:Đặt một lề xung quanh mỗi cạnh của UICollectionView

--------------- 
|X X X X X X X| 
|X X X X X X X| 
|X X X X X X X| 
|X X X X X X X| 
|X X X X X X X| 
|X X X X X X X| 
--------------- 

Tôi muốn đặt một biên độ xung quanh mỗi cạnh như vậy:

--------------- 
| X X X X X X | 
| X X X X X X | 
| X X X X X X | 
| X X X X X X | 
| X X X X X X | 
| X X X X X X | 
--------------- 

tôi cố gắng để đạt được điều này bằng cách đặt UICollectionView bên UIView lưu trữ của mình bằng cách thiết lập Khung của nó để mô phỏng một biên giới nhưng nó cuộn trong khung để bị cắt đứt ở phía trên và phía dưới và cuộn cũng xuất hiện trong giới hạn của khung.

Tôi đã xem API nhưng tôi không thể thấy bất kỳ điều gì rõ ràng để đạt được điều này. Bất kỳ ý tưởng?

Trả lời

6

Trong

(UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
} 

bạn có thể cung cấp cho các tế bào của bạn một số lề ở phía bên trái.

Hoặc bạn có thể tạo ô tùy chỉnh có lề.

hoặc bạn có thể thiết lập thuộc tính .sectionInset của CollectionviewFlowLayout của bạn, mà nên là cách dễ nhất (nếu bạn sử dụng FlowLayout)

10

Bạn có thể kiểm soát khá nhiều mọi khía cạnh của lưới bằng giao thức của collectionview. Dưới đây là một ví dụ:

- (UICollectionViewFlowLayout *)collectionViewFlowLayout 
{ 
    UICollectionViewFlowLayout *flowLayout = [UICollectionViewFlowLayout new]; 
    flowLayout.itemSize = CGSizeMake(180, 255); 
    flowLayout.sectionInset = UIEdgeInsetsMake(10, 30, 0, 30); 
    flowLayout.minimumInteritemSpacing = 0.0f; 
    flowLayout.minimumLineSpacing = 0.0f; 
    flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; 
    return flowLayout; 
} 

Một bạn sẽ muốn thay đổi trong trường hợp của bạn là sectionInsets

15

Bạn có thể tận dụng các chức năng sau đây.

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
    { 
     return UIEdgeInsetsMake(50, 50,15,50); 
    } 

Bạn sẽ phải chơi xung quanh với số để tìm hiểu cách ép collectionviewCells trong một dòng.

UIEdgeInsetsMake (CGFloat top,CGFloat left,CGFloat bottom,CGFloat right); 

Đối Swift 3

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsMake(10, 4, 10, 4) 
} 
+0

Đây là giải pháp yêu thích của tôi ở đây - nó ít khó khăn hơn nhiều so với việc cho các ô đệm của bạn. Và contentInset không phải lúc nào cũng hiệu quả với tôi. –

+1

Làm thế nào để thực hiện điều này nhanh chóng @Vinayak Kini –

38

Tôi biết đây là một câu hỏi cũ, nhưng đừng quên rằng UICollectionView thừa hưởng từ UIScrollView.

UICollectionView *collectionView = [[UICollectionView alloc] init]; 
collectionView.contentInset = UIEdgeInsetsMake(x.x, x.x, x.x, x.x); 
// Swift 3 for good measure 
let collectionView = UICollectionView() 
collectionView.contentInset = UIEdgeInsets(top: x.x, left: x.x, bottom: x.x, right: x.x) 

Hãy nhận biết rằng cả hai contentInset và sectionInset có thể thay đổi khoảng cách của các tế bào trong quan điểm của bạn. Để biết thêm thông tin về điều đó, hãy xem this bài đăng.

+1

'collectionView.contentInset' là những gì tôi cần. Cảm ơn – Ali

3

Swift 2.0

self.automaticallyAdjustsScrollViewInsets = false 
self.collectionView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0) 
1

Mở Xcode 8, nếu bạn đang sử dụng xây dựng giao diện, bạn có thể thiết lập các mục Insets ngay trên Kích Inspector:

enter image description here

enter image description here

0

Swift 3 phiên bản (Vinayak Kini câu trả lời):

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { 

    return UIEdgeInsetsMake(10, 10, 10, 10) //top, left, bottom, right 
} 
Các vấn đề liên quan