क्या यह पता करने का कोई तरीका है कि UIScrollView
अंदर ऊपर या नीचे पहुंचा है या नहीं
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
willDecelerate:(BOOL)decelerate
?
धन्यवाद।
जवाबों:
UIScrollViewDelegate
अपनी कक्षा में लागू करें , और फिर इसे जोड़ें:
-(void)scrollViewDidScroll: (UIScrollView*)scrollView
{
float scrollViewHeight = scrollView.frame.size.height;
float scrollContentSizeHeight = scrollView.contentSize.height;
float scrollOffset = scrollView.contentOffset.y;
if (scrollOffset == 0)
{
// then we are at the top
}
else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
{
// then we are at the end
}
}
आशा है कि यह आप के बाद क्या है! उपरोक्त कोड में अधिक शर्तों को जोड़कर एलीस के पास एक टिंकर है और स्क्रॉलऑफ़सेट के मूल्य को NSLog करें।
अच्छी तरह से contentInsets
शामिल हैं, जब आप यह निर्धारित करने की कोशिश करते हैं कि स्क्रॉलव्यू शीर्ष पर है या नीचे। तुम भी मामलों में रुचि हो सकती है जब आपके scrollview है ऊपर ऊपर और नीचे नीचे। यहां वह कोड है जिसका उपयोग मैं शीर्ष और निचले पदों को खोजने के लिए करता हूं:
स्विफ्ट:
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
}
}
उद्देश्य सी:
@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
return scrollViewBottomOffset
return scrollViewBottomOffset.rounded()
safeAreaInsets
भी यह कारक है। scrollView.contentOffset.y + scrollView.bounds.height - scrollView.safeAreaInsets.bottom
यदि आप कोड को स्विफ्ट में चाहते हैं:
override func scrollViewDidScroll(scrollView: UIScrollView) {
if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
//reach bottom
}
if (scrollView.contentOffset.y <= 0){
//reach top
}
if (scrollView.contentOffset.y > 0 && scrollView.contentOffset.y < (scrollView.contentSize.height - scrollView.frame.size.height)){
//not top and not bottom
}
}
सरल और साफ विस्तार:
import UIKit
extension UIScrollView {
var scrolledToTop: Bool {
let topEdge = 0 - contentInset.top
return contentOffset.y <= topEdge
}
var scrolledToBottom: Bool {
let bottomEdge = contentSize.height + contentInset.bottom - bounds.height
return contentOffset.y >= bottomEdge
}
}
गिटहब पर:
मुझे लगा कि यह कैसे करना है:
CGFloat maxPosition = scrollView.contentInset.top + scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.bounds.size.height;
CGFloat currentPosition = scrollView.contentOffset.y + self.topLayoutGuide.length;
if (currentPosition == maxPosition) {
// you're at the bottom!
}
इसे इस तरह करें (स्विफ्ट 3 के लिए):
class MyClass: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
//scrolled to top, do smth
}
}
}
navigationController
, तो आप इस तरह से कुछ और करना चाह सकते हैं:scrollOffset <= (0 - self.navigationController.navigationBar.frame.size.height - 20)
और(scrollOffset + scrollHeight) >= scrollContentSizeHeight