Bene, contentInsets
sono anche coinvolti quando si tenta di determinare se scrollView è in alto o in basso. Potresti anche essere interessato a casi in cui la tua scrollView è sopra la parte superiore e sotto nella parte inferiore. Ecco il codice che uso per trovare superiore e inferiore posizioni:
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
fonte
2013-02-07 07:31:50
Se sei in un 'navigationController', si potrebbe desiderare di fare qualcosa di più simile a questo:' scrollOffset <= (0 - self.navigationController.navigationBar.frame.size.height - 20) 'e' (scrollOffset + scrollHeight)> = scrollContentSizeHeight' –
Problema con questo è il rimbalzo ... tutto viene chiamato due volte una volta raggiunto top o bot tom. C'è una soluzione a questo, oltre a disattivare il rimbalzo della vista tabella o collezione? – denikov
@denikov hai trovato qualche soluzione per questo? – Priyal