【问题标题】:UIScrollView with page control带有页面控制的 UIScrollView
【发布时间】:2013-05-31 21:43:02
【问题描述】:

在 uiscrollview 中使用三个不同的页面视图控制器作为视图。带有 pagecontrol 的 UIScrollView 仅将第三页显示为当前页面,但不显示其他两个页面。页面控件也不可见。

- (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。

感谢您的帮助。

【问题讨论】:

    标签: iphone ios6 uiscrollview uipagecontrol


    【解决方案1】:

    您将 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];
    }
    

    这在过去一直对我有用。

    【讨论】:

    • 另外,我从来没有在setNumberOfPages之前setCurrentPage...可能没关系,但可能会导致意想不到的结果?
    【解决方案2】:

    我的第一个答案解决了错误的问题...您只能看到第 3 页,因为所有三个页面都是相互叠加的。试试:

    page1 CGRectMake(0,0,320,420) page2 CGRectMake(320,0,320,420) page3 CGRectMake(640,0,320,420)

    然后它们将在滚动视图中彼此相邻而不是彼此重叠。

    【讨论】:

    • 你说的很对。这是一个小问题,但我错过了。都感谢你。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多