問題描述:
UIScrollView嵌套UIScrollView(UITableView)時(shí),當(dāng)子視圖滑動(dòng)到邊界時(shí),滑動(dòng)手勢(shì)無法傳遞給父視圖。
解決方案:
重寫子視圖的gestureRecognizerShouldBegin方法,當(dāng)子視圖滑動(dòng)到邊界時(shí),將pan手勢(shì)傳遞到父視圖。
代碼:
// 判斷scrollView是不是在最頂部往下滑或者在最底部往上滑,如果是這兩種情況才需要把事件往下傳遞
- (BOOL)isScrollViewOnTopOrBottom {
? ? CGPoint translation = [self.panGestureRecognizer translationInView:self];
? ? if (translation.y > 0 && self.contentOffset.y <= 0) {
? ? ? ? return YES;
? ? }
? ? CGFloat maxOffsetY = floor(self.contentSize.height - self.bounds.size.height);
? ? if (translation.y < 0 && self.contentOffset.y >= maxOffsetY) {
? ? ? ? return YES;
? ? }
? ? return NO;
}
#pragma mark - GestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
? ? if (gestureRecognizer == self.panGestureRecognizer) {
? ? ? ? if (gestureRecognizer.state == UIGestureRecognizerStatePossible) {
? ? ? ? ? ? if ([self isScrollViewOnTopOrBottom]) {
? ? ? ? ? ? ? ? return NO;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return YES;
}
參考文章:
http://skx926.com/2017/05/28/nested-scrollview-scrolling-conflit/