2013-07-16 39 views
18

Tôi có UICollectionView với UICollectionViewLayout tùy chỉnh (thực ra, tôi đang sử dụng this nice layout).UICollectionXem nội dungBật thay đổi với bố cục tùy chỉnh

Tôi đặt contentOffset = CGPointZero trong chế độ xemDidLoad. Sau viewDidLoad, tuy nhiên, bù lại là -20, và nội dung được đẩy xuống như vậy:


picture

(Nó sẽ được tuôn ra với dòng). Tôi đang tải bố cục chế độ xem bộ sưu tập trong trình tạo giao diện. Dường như vấn đề của tôi rất giống với this one, tuy nhiên các giải pháp không có tác dụng đối với tôi.

Tôi đã thử sửa đổi collectionViewContentSize trong triển khai bố cục của mình để đảm bảo nó luôn lớn hơn kích thước của collectionView. Mặc dù điều này có nghĩa là tôi có thể cuộn nội dung của tôi xuống (nó ngắn hơn chiều cao của collectionView) và ẩn thêm không gian, tôi cũng có thể cuộn lại để xem nó.

Không có gì có vẻ hoạt động!

Trả lời

13

Giải pháp duy nhất tôi có thể nghĩ ra rằng có hành vi khó chấp nhận được:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (self.collectionView.contentOffset.y < 0) { 
     self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x, 0.0); 
    } 
} 

Cũng như thiết lập chiều cao của nội dung để fmax(self.collectionView.frame.size.height + 20, [self stackedSectionHeight]) trong collectionViewContentSize

này loại bỏ không gian phía trên phần tiêu đề, nhưng nó loại bỏ "thư bị trả lại" từ trên cùng. Một giải pháp khá tối ưu, nhưng khá chấp nhận được.

Tôi sẽ chấp nhận câu trả lời hay hơn nếu có ai đó, hoặc nếu tôi tìm câu trả lời tôi sẽ cập nhật câu trả lời này.

+1

Tôi gặp sự cố tương tự khi sử dụng bố cục ngang. –

+0

Trong bố cục veritacal nội dung là OK. khi thay đổi đối tượng bố cục thành ngang, tất cả nội dung biến mất –

+0

Cùng một vấn đề và giải pháp tương tự tôi đã tìm thấy. Tôi chỉ nhận được điều này trên iOS7 SDK và chỉ khi chạy trên iOS7.Điều kỳ lạ nhất là một scrollView trong viewController khác không có vấn đề này .. Tôi phá vỡ đầu của tôi, nhưng không tìm thấy một lý do –

45

Tôi đã tìm thấy lý do tại sao điều này xảy ra. Đánh dấu vào câu trả lời chấp nhận từ câu hỏi này: Status bar and navigation bar appear over my view's bounds in iOS 7

Trên thực tế, chúng tôi chỉ có thể thiết lập edgesForExtendedLayout hoặc automaticallyAdjustsScrollViewInsets thuộc tính của UIViewController trong IB (nếu bạn sử dụng Storyboard) của trong viewDidLoad và nó sẽ khắc phục vấn đề của chúng tôi.

Chỉ cần đừng quên kiểm tra cho khách sạn này có sẵn, bởi vì trong iOS6 hoặc trước khi nó sẽ gây ra tai nạn:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { 
    self.automaticallyAdjustsScrollViewInsets = NO; 
} 

Trân trọng!

+6

Lưu ý rằng nếu bạn có một bộ điều khiển xem bộ sưu tập chứa trong một bộ điều khiển xem cha mẹ, bạn phải đặt 'automaticAdjustsScrollViewInsets 'trên bộ điều khiển * parent *. – zoul

+0

Tôi đã có một trường hợp mà tôi muốn đặt một collectionView với 74h bởi 30w tế bào đã được bù đắp bởi -44 mỗi lần tôi chuyển từ bộ điều khiển xem cha mẹ khác. Đã cố gắng để giải quyết điều này trong gần hai giờ bằng cách cố gắng rất nhiều cách sai. Cảm ơn. – devdc

0

Tôi bắt đầu tìm thấy sự cố này xuất hiện trên iOS 11, nơi tôi có một chế độ xem cuộn trong chế độ xem cuộn. Đã cho tôi gần một ngày để tìm ra.

Cố gắng thiết lập các nội dung hành vi điều chỉnh inset:

if #available(iOS 11.0, *) { 
    scrollView.contentInsetAdjustmentBehavior = .never 
} 

này cố định collectionview tôi điều chỉnh nội dung của nó inset xuống một lượng nhỏ như khung collectionview sẽ di chuyển qua các khu vực an toàn của scrollview kèm theo.

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