반응형
UIScrollView가 상단 또는 하단에 도달했는지 확인합니다.
만약에, 만약에 대해 아는 방법이 있나요..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
}
}
목표-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
코드를 신속하게 입력하려면 다음을 수행합니다.
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
}
}
GitHub에서:
https://github.com/salutis/swift-scroll-view-edges
정확히 어떻게 하는지 알아냈습니다.
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!
}
다음과 같이 수행합니다(Swift 3의 경우).
class MyClass: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) {
//scrolled to top, do smth
}
}
}
언급URL : https://stackoverflow.com/questions/7706152/check-if-a-uiscrollview-reached-the-top-or-bottom
반응형
'source' 카테고리의 다른 글
변환 후 '1970-01-01' 표시 PHP 날짜 (0) | 2023.09.09 |
---|---|
Swift의 정적 함수 변수 (0) | 2023.09.09 |
Node.js에서 파일의 크기를 찾는 방법은 무엇입니까? (0) | 2023.09.04 |
파이썬을 사용하여 네이티브 아이폰 앱을 작성할 수 있습니까? (0) | 2023.09.04 |
초당 Ajax 요청 실행 (0) | 2023.09.04 |