2013-06-18 21 views

Trả lời

34

Thay vì thay đổi bounces bất động sản, tôi nói thêm rằng đến UIScrollViewDelgate phương pháp:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.y<=0) { 
     scrollView.contentOffset = CGPointZero; 
    } 
} 
+0

Điều này phải được đánh dấu là câu trả lời đúng. Điều này có ý nghĩa hơn khi sử dụng đại biểu hơn để thêm người quan sát cho "contentOffset" – Eric

+0

Điều này sẽ ngăn việc di chuyển lên trên hoàn toàn –

+0

Sẽ tốt hơn nếu đặt 'bounds' thay vì' contentOffset' để tránh gọi đại biểu lần thứ hai, đặc biệt nếu có nhiều mã trong 'scrollViewDidScroll:'. – Arkku

4

Có thể bằng cách quan sát thuộc tính contentOffset của UITableview.

[_tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL]; 

. . và ngăn chặn sự bù đắp từ việc tiêu cực.

+1

Không phải là tableView một lớp con của UIScrollView? –

+1

UITableView là một lớp con của UIScrollView. . . điều này mang lại cho tôi một ý tưởng. . . quan sát bù đắp nội dung. . nếu nó đi tiêu cực, khóa lại bằng không. –

2

Bạn có thể thử sử dụng phương pháp UIScrollViewDelegate để phát hiện hướng kéo và điều chỉnh thuộc tính bounces một cách thích hợp?

+0

Cảm ơn Mike! Cũng tìm thấy một cách để làm điều đó bằng cách quan sát contentOffset. –

+0

Hi tôi đã cố gắng quan sát và thay đổi tableview.bounces để NO cho phù hợp khi bù đắp đạt tiêu cực nhưng có trục trặc khi tableview đi trong tiêu cực. Làm thế nào bạn tránh được nó, xin vui lòng chia sẻ cho tôi giải pháp của bạn nếu nó không xảy ra với bạn. –

0

Trong nhanh chóng 2.2:

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView.contentOffset.y <= 0 { 
     scrollView.contentOffset = CGPointZero 
    } 
} 
0
-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.y <= 0) { 
     scrollView.contentOffset = CGPointZero; 
     scrollView.showsVerticalScrollIndicator = NO; 
    } else { 
     scrollView.showsVerticalScrollIndicator = YES; 
    } 
} 

giải pháp @Liron Berger 's sẽ gây VerticalScrollIndicator vẫn hiển thị, chỉ cần đặt showsVerticalScrollIndicator thành NO có thể giải quyết vấn đề này

1

Tôi cũng đã gặp phải vấn đề này và giải pháp của tôi là:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
if (scrollView.contentOffset.y > 100) { 
    scrollView.bounces = NO; 
}else{ 
    scrollView.bounces = YES; 
} 
} 

tôi sử dụng mã này trong dự án của tôi và nó làm việc tốt.

1

Đối nhanh chóng 3,1

extension YourViewController: UIScrollViewDelegate{ 
    func scrollViewDidScroll(_ scrollView: UIScrollView) { 
     if scrollView == tableView { 
      let a = scrollView.contentOffset 
      if a.y <= 0 { 
       scrollView.contentOffset = CGPoint.zero // this is to disable tableview bouncing at top. 
      } 
     } 
    } 
}