带有页面控件的UIScrollView



在uiscrollview中使用三个不同的页面视图控制器作为视图。带pagcontrol的UIScrollView只显示第三个页面作为当前页面,而不显示另外两个页面。Pagecontrol也不可见。

- (void)viewDidLoad
{
[super viewDidLoad];
PageOne *pageOne = [[PageOne alloc] init];
pageOne.view.frame = CGRectMake(0, 0, 320, 420);
PageTwo *pageTwo = [[PageTwo alloc]init];
pageTwo.view.frame = CGRectMake(0, 0, 320, 420);
PageThree *pageThree = [[PageThree alloc] init];
pageThree.view.frame = CGRectMake(0, 0, 320, 420);
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
[scrollView setContentSize:CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height)]; 
[scrollView setDelegate:self]; 
[scrollView setPagingEnabled:YES]; 
[scrollView setShowsHorizontalScrollIndicator:YES]; 
[scrollView addSubview:pageOne.view];
[scrollView addSubview:pageTwo.view];
[scrollView addSubview:pageThree.view];
[self.view addSubview:scrollView];
_pageControl = [[UIPageControl alloc] init];
[_pageControl setCurrentPage:0]; 
[_pageControl setNumberOfPages:3]; 
[_pageControl sizeToFit]; 
[_pageControl setFrame:CGRectMake((scrollView.frame.size.width / 2) - (_pageControl.frame.size.width / 2), scrollView.frame.size.height - _pageControl.frame.size.height, _pageControl.frame.size.width, _pageControl.frame.size.height)]; 
[self.view addSubview:self.pageControl]; 

[super viewDidLoad];
}
 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
_pageControl.currentPage = lround(scrollView.contentOffset.x / scrollView.frame.size.width); 
}

现在只显示page3。为什么不显示第一页和第二页呢?

为什么不依次显示第一页、第二页和第三页呢?

您正在将您的contenttoffset除以滚动视图的全宽度,而不是每个页面的宽度(我认为这会导致page1总是显示而不是page3)。结果是page2的偏移量为320,scrollView的宽度为960,320/960为0.333

另外,因为您启用了分页,所以您应该实现

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

并在那里设置pageControl的currentPage,这样您将只在每个页面的边缘调用它,而不是在中间的每个点(不需要舍入)。

尝试注释你的scrollViewDidScroll方法,而不是使用

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [pageControl setCurrentPage:scrollView.contentOffset.x/320];
}

这在过去对我来说一直很有效。

我的第一个回答是错误的…你只能看到第3页,因为这三页都是相互叠加的。试一试:

page1 CGRectMake (0, 0320420)所以page2 CGRectMake(320、0320420)page3 CGRectMake(640、0320420)

则它们将在滚动视图中彼此相邻而不是彼此顶部

最新更新