に達したかどうかを知ることはUIScrollView
がiPhone - UIScrollViewのは、上部または下部
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
willDecelerate:(BOOL)decelerate
の内側上部または下部に達しているかどうかを知る方法はありますか?
ありがとうございました。
に達したかどうかを知ることはUIScrollView
がiPhone - 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
}
}
希望、これはあなたが後にあるものです!それ以外の場合は、上記のコードに条件を追加してscrollOffsetの値をNSLogに追加します。あなたはscrollViewが上部にまたは下部にあるかどうかを判断しようとすると、
まあ、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
}
}
の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
良いです。これは正しいです!前の答えは間違っています。 scrollviewdidscrollを実装 –
これは良い答えは、performences scrollViewDidScrollを使用していない場合、私はそれを呼び出すにはどうすればよい – Vassily
に悪いのですか? –
:
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のコードたい場合:
を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
}
}
シンプルでクリーンな拡張子:GitHubの上で
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
}
}
:
あなたは 'navigationController'にしている場合、あなたはより多くのこのような何かをしたい場合があります:' scrollOffset <=(0 - self.navigationController.navigationBar.frame.size.height - 20) 'と'(scrollOffset + scrollHeight)> = scrollContentSizeHeight' –
その通報はバウンスです...すべてが二回に一度、トップやボットに達する呼び出されますトムそこには、テーブルやコレクションビューのバウンスをオフにする以外に、その解決策はありますか? – denikov
@denikovあなたはその解決策を見つけましたか? – Priyal