2011-12-15 36 views
11

Tôi có một số bộ điều khiển chế độ xem với một hoặc nhiều lần xem cuộn. Mặc dù tôi đã đặt cờ scrollsToTop rõ ràng trong các trình điều khiển chế độ xem có nhiều chế độ xem cuộn, một số chế độ xem cuộn sẽ từ chối di chuyển lên khi tôi nhấn vào thanh trạng thái.Cách tìm hiểu xem UIScrollView nào khác cản trở scrollsToTop?

Sau khi đẩy một trình điều khiển chế độ xem khác và bật nó, cử chỉ đôi khi hoạt động trong chế độ xem trước đó chưa có.

Rất khó hiểu và tôi không biết vấn đề là gì. Làm thế nào vấn đề này có thể được gỡ lỗi một cách hiệu quả? Có thông báo toàn cầu (riêng tư) cho thanh trạng thái để tôi có thể cuộn chế độ xem theo cách thủ công không?

Trả lời

22

Tôi đã sử dụng mã như sau để gỡ lỗi kịch bản này, trước đây:

- (void)findMisbehavingScrollViews 
{ 
    UIView *view = [[UIApplication sharedApplication] keyWindow]; 
    [self findMisbehavingScrollViewsIn:view]; 
} 

- (void)findMisbehavingScrollViewsIn:(UIView *)view 
{ 
    if ([view isKindOfClass:[UIScrollView class]]) 
    { 
     NSLog(@"Found UIScrollView: %@", view); 
     if ([(UIScrollView *)view scrollsToTop]) 
     { 
      NSLog(@"scrollsToTop = YES!"); 
     } 
    } 
    for (UIView *subview in [view subviews]) 
    { 
     [self findMisbehavingScrollViewsIn:subview]; 
    } 
} 

Tùy thuộc vào bao nhiêu UIScrollViews bạn tìm thấy, bạn có thể sửa đổi mã để giúp gỡ tình hình cụ thể của bạn.

Một số ý tưởng:

  • Thay đổi màu nền của scrollviews khác nhau để xác định chúng trên màn hình.
  • In phân cấp chế độ xem của các lần xem cuộn đó để xác định tất cả các người giám sát của họ.

Lý tưởng nhất, bạn chỉ nên tìm một UIScrollView duy nhất trong cấu trúc phân cấp cửa sổ đã cuộnToToop được đặt thành CÓ.

+0

Mặc dù tôi không thể kiểm tra giải pháp atm này, lý do là âm thanh. –

+0

Đoạn trích đơn giản nhưng tuyệt đẹp! – nobre

1

Tôi đã thay đổi câu trả lời chấp nhận vào nhanh chóng cho tiện theo dõi:

func findMisbehavingScrollViews() { 
    var aview = UIApplication.sharedApplication().keyWindow 
    findMisbehavingScrollViewsIn(aview!) 
} 

func findMisbehavingScrollViewsIn(aview: UIView) { 
    if aview.isKindOfClass(UIScrollView) { 
     if (aview as! UIScrollView).scrollsToTop { 
      print("found uiscrollview \(aview)") 
     } 
    } 
    for bview in aview.subviews { 
     findMisbehavingScrollViewsIn(bview) 
    } 
} 
Các vấn đề liên quan