2013-09-27 181 views
24

Tôi đang nhắm mục tiêu iOS7 trong ứng dụng mới nhất của mình và nhấn vào thanh trạng thái dường như không cuộn bảngView hoặc collectionView xuống đầu.Không thể cuộn scrollToToTop hoạt động trên iOS7

Tôi đã đặt self.tableView.scrollsToTop = true và vẫn không có gì xảy ra.

Tôi biết Apple đã thay đổi đáng kể thanh trạng thái trong iOS7, nhưng những thay đổi đó có phá vỡ chức năng scrollsToTop không?

Cập nhật

Để đáp lại lời nhận xét trong một trong các câu trả lời, tôi đã kiểm tra để đảm bảo rằng quan điểm bộ sưu tập của tôi đã thực sự scrollview chỉ trên màn hình, và nó là:

(lldb) po [self.view recursiveDescription] 
<UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>> 
    | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70> 
    | | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x10965ee0>> - (null) 
    | | <UIImageView: 0x10948f60; frame = (316.5 561; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x10966030>> - (null) 

Cập nhật # 2

Không chắc chắn có quan trọng hay không, nhưng tôi đang sử dụng một Navigation điều khiển iOS7 chuẩn trong đó thanh điều hướng trong suốt và áp dụng làm mờ vào bộ sưu tập của tôi/tableViews khi chúng cuộn bên dưới.

Update # 3

đặn nó ra. Hóa ra tôi đã làm có nhiều hơn một scrollView trên màn hình. Ứng dụng của tôi có menu ngăn kéo bên trái bên dưới phần chính của ứng dụng và trình đơn đó có tableView cho các tùy chọn. Tôi chỉ cần đặt self.menuTable.scrollsToTop = false và mọi thứ hoạt động như mong đợi trong suốt phần còn lại của ứng dụng. Không phải triển khai các phương thức scrollView Delegate hoặc bất cứ thứ gì.

+0

Bạn cần phải thiết lập một cái gì đó như thế nào, self.scrollView.scrollEnabled = YES; ? Nhưng đối với tableview .. – DogCoffee

+0

đề xuất tuyệt vời trong bản cập nhật # 3, đã nhận ra rằng chỉ cần làm việc theo cùng một cách. Nhưng điều kỳ lạ là nếu không có bản cập nhật # 3 sửa chữa nó làm việc trong iOS8 nhưng không phải trong iOS7. –

Trả lời

23

Bạn có nhiều chế độ xem cuộn/chế độ xem bảng/bộ sưu tập trên màn hình không? Nếu vậy, chỉ một trong số họ có thể có scrollsToTop được đặt thành YES, nếu không iOS7 sẽ không cuộn bất kỳ thứ gì trong số họ lên đầu.

Bạn cũng có thể thực hiện phương pháp UIScrollViewDelegate scrollViewShouldScrollToTop: và return YES nếu được thông qua vào xem di chuyển bằng với một mà bạn muốn di chuyển lên trên cùng:

- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView { 
    if (scrollView == self.myTableView) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 
+0

Theo như tôi có thể nói tôi chỉ có tableView của tôi trong một bộ điều khiển xem cụ thể, và một collectionView khác. Tôi đặt cả hai để scrollsToTop = true, và thực hiện các phương pháp đại biểu scrollview bạn đề nghị. Tôi đã ném một tuyên bố đăng nhập ở trên cùng, và phương pháp đó không bao giờ được gọi. Tôi đã thử trên giả lập và thiết bị. – djibouti33

+0

Cả hai chế độ xem của trình điều khiển chế độ xem đó có thể nhìn thấy đồng thời không? – Greg

+0

xin lỗi vì sự nhầm lẫn. đây là hai phần hoàn toàn khác nhau của ứng dụng. – djibouti33

11

Câu trả lời ngắn gọn là không có gì khác nhau trong IOS 7. Miễn là không có nhiều hơn một UIScrollView được nạp, tableView hoặc collectionView của bạn sẽ cuộn lên trên cùng khi người dùng chạm vào thanh trạng thái. Chìa khóa ở đây được tải; scrollView khác không nhất thiết phải trên màn hình để xung đột với một scrollView khác.

Ngăn kéo trượt ở bên trái/phải rất phổ biến trong những ngày này và đây là lý do cho sự cố của tôi. Tôi có một menu chứa các tùy chọn điều hướng của tôi và tất cả đều được tổ chức bởi một UITableView. Tôi phải đảm bảo rằng tôi đã thiết lập menuTable.scrollsToTop = false trước khi tôi có thể làm mọi thứ hoạt động trong các phần khác của ứng dụng.

+0

Có! Điều này đã làm cho tôi! : D –

+0

Cảm ơn! Bạn đã cứu ngày của tôi :) – Nikant

+0

Điều này chắc chắn tiết kiệm thời gian của tôi. – pkc456

4

cho người khác:

Hãy nhớ rằng xem di chuyển bạn đang tìm kiếm cũng có thể là một UIWebView..not chỉ UITableView. Một điều quan trọng khác là nó không chỉ về scrollViews VISIBLE, mà còn là scrollviews LOADED.

Nếu bạn không tìm thấy scrollview, bạn luôn có thể chèn bảng thử nghiệm UITableView, ngay lập tức khi ứng dụng được khởi động, kiểm tra nếu nó cuộn lên trên, và sau đó tải hơn và quan điểm hơn, cho đến khi dừng bảng thử nghiệm di chuyển lên trên.

7

Vấn đề của tôi là tôi có UITextView với scrollsToTop được đặt thành YES, vì vậy, UITableView của tôi không phản hồi cử chỉ. Tóm lại, hãy kiểm tra tất cả các chế độ xem có thể cuộn khác.

+1

+1 Cảm ơn. Vấn đề này đã khiến tôi phát điên ... –

-2

luôn này làm việc cho tôi:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 
4

Nếu tế bào bảng của bạn là người năng động, tháo sau:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView 
{ 
    return YES; 
} 

Tạo một chức năng mới như sau:

- (void) disableScrollsToTopPropertyOnAllSubviewsOf:(UIView *)view { 
    for (UIView *subview in view.subviews) { 
     if ([subview isKindOfClass:[UIScrollView class]]) { 
      ((UIScrollView *)subview).scrollsToTop = NO; 
     } 
     [self disableScrollsToTopPropertyOnAllSubviewsOf:subview]; 
    } 
} 

Gọi chức năng ở trên trong - (void)viewDidLoad

[self disableScrollsToTopPropertyOnAllSubviewsOf:self.view]; 

Bây giờ cho phép ScrollsToTop cho xem bảng của bạn như sau:

[myTableView setScrollsToTop:YES];