在uiscrollview中使用三个不同的页面视图控制器作为视图。带有pagecontrol的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);
}
现在它只显示pageThree。为什么不显示pageOne和pageTwo。
为什么不在页面中显示PageOne,pageTwo和pageThree。
感谢您的帮助。
答案 0 :(得分:2)
您将contentOffset除以滚动视图的整个宽度而不是每个页面的宽度(我认为这会导致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];
}
过去这一直对我有用。
答案 1 :(得分:1)
我的第一个答案解决了错误的问题......你只能看到第3页,因为所有三个页面都是相互叠加的。尝试:
第1页CGRectMake(0,0,320,420) 第2页CGRectMake(320,0,320,420) 第3页CGRectMake(640,0,320,420)
然后它们将在彼此相邻的滚动视图中而不是彼此重叠。