Có thể trả lại UITableView
ở phía dưới cùng không, nhưng không phải ở trên cùng? Nếu có, vui lòng chỉ cho tôi mã.Cạnh dưới của thư bị trả về UITableView chỉ
Trả lời
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;
}
}
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.
Không phải là tableView một lớp con của UIScrollView? –
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. –
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?
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. –
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. –
Trong nhanh chóng 2.2:
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.y <= 0 {
scrollView.contentOffset = CGPointZero
}
}
-(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
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.
Đố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.
}
}
}
}
Đ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
Điều này sẽ ngăn việc di chuyển lên trên hoàn toàn –
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