Bueno, contentInsets
también están involucrados, cuando intenta determinar si scrollView está en la parte superior o inferior. También podría estar interesado en casos cuando su scrollView es sobre en la parte superior y debajo de en la parte inferior. Este es el código que utilizo para encontrar superior e inferior posiciones:
Swift:
extension UIScrollView {
var isAtTop: Bool {
return contentOffset.y <= verticalOffsetForTop
}
var isAtBottom: Bool {
return contentOffset.y >= verticalOffsetForBottom
}
var verticalOffsetForTop: CGFloat {
let topInset = contentInset.top
return -topInset
}
var verticalOffsetForBottom: CGFloat {
let scrollViewHeight = bounds.height
let scrollContentSizeHeight = contentSize.height
let bottomInset = contentInset.bottom
let scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight
return scrollViewBottomOffset
}
}
Objective-C:
@implementation UIScrollView (Additions)
- (BOOL)isAtTop {
return (self.contentOffset.y <= [self verticalOffsetForTop]);
}
- (BOOL)isAtBottom {
return (self.contentOffset.y >= [self verticalOffsetForBottom]);
}
- (CGFloat)verticalOffsetForTop {
CGFloat topInset = self.contentInset.top;
return -topInset;
}
- (CGFloat)verticalOffsetForBottom {
CGFloat scrollViewHeight = self.bounds.size.height;
CGFloat scrollContentSizeHeight = self.contentSize.height;
CGFloat bottomInset = self.contentInset.bottom;
CGFloat scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight;
return scrollViewBottomOffset;
}
@end
Si estás en un 'navigationController', es posible que desee hacer algo más como esto:' scrollOffset <= (0 - self.navigationController.navigationBar.frame.size.height - 20) 'and' (scrollOffset + scrollHeight)> = scrollContentSizeHeight' –
Problema con eso es el rebote ... todo se llama dos veces una vez que llega a la parte superior o bot Tom. ¿Hay alguna solución para eso, además de desactivar el rebote de la vista de tabla o colección? – denikov
@denikov ¿encontró alguna solución para eso? – Priyal