【发布时间】:2026-02-15 04:50:02
【问题描述】:
如果启用showsHorizontalScrollIndicator,UIScrollView 底部会显示一个小的水平指示器。我想知道是否有人可以告诉我这是如何计算的。原因是,如果有内容左/右,我想在水平导航系统中显示自定义指示器,当内容可用时显示/隐藏。
【问题讨论】:
标签: ios uiscrollview
如果启用showsHorizontalScrollIndicator,UIScrollView 底部会显示一个小的水平指示器。我想知道是否有人可以告诉我这是如何计算的。原因是,如果有内容左/右,我想在水平导航系统中显示自定义指示器,当内容可用时显示/隐藏。
【问题讨论】:
标签: ios uiscrollview
我只使用scrollView.contentOffset.x。如果你想知道你在哪一页,你除以你的页面宽度(假设你有一个标准宽度)。所以
int currentPage=(int)scrollView.contentOffset.x/SCREEN_WIDTH; 例如。现在如果你想显示一个位置指示器,比如在 iOS 主页中,你可以在
-(void)scrollViewDidScroll:(UIScrollView *)sender 类似
currentPage=(int)scrollView.contentOffset.x/SCREEN_WIDTH;
for(int i=0; i<pageCount; i++){
if(i==currentPage)//display a filled in 'o'
else //display an empty 'o'
}
哦,顺便说一句,-(void)scrollViewDidScroll:(UIScrollView *)sender 在最初加载 UIScrollView 时不会被调用,所以您或许应该自己调用它(以便在用户滚动之前显示指示器)。当然,您也可以使用scrollView.contentOffset.y,因此您可以轻松地调整它以显示“o”的“+”形排列,同时暗示上方和下方的内容。
【讨论】:
我使用了以下解决方案。不是最漂亮的,但它似乎工作。需要UIScrollViewDelegate。
-(void)scrollViewDidScroll:(UIScrollView *)sender
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self scrollViewDidEndScrollingAnimation:subNavigation];
}
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
if (scrollView.contentOffset.x <= 0) {
[self scrollViewReachedLeftBound];
} else if (scrollView.contentOffset.x >= 300) {
[self scrollViewReachedRightBound];
} else {
[leftArrow setHidden:NO];
[rightArrow setHidden:NO];
}
}
- (void)scrollViewReachedLeftBound
{
[leftArrow setHidden:YES];
[rightArrow setHidden:NO];
}
- (void)scrollViewReachedRightBound
{
[leftArrow setHidden:NO];
[rightArrow setHidden:YES];
}
【讨论】: