iPhone Page Control 仅显示在 UIScrollView 的第一页上

Posted

技术标签:

【中文标题】iPhone Page Control 仅显示在 UIScrollView 的第一页上【英文标题】:iPhone Page Control only shows on the first page of a UIScrollView 【发布时间】:2011-07-10 15:15:59 【问题描述】:

我的页面控件只显示在 UIScrollView 的第一页。一旦我滚动到下一页,它就会消失。

你能告诉我我做错了什么吗?因为我很好奇每次向我的 UIScrollView 添加子视图时是否需要添加页面控件的子视图。

我的相关代码:

-(IBAction)clickPageControl:(id)sender

    int page=pageControl.currentPage;
    CGRect frame=scroller.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    [scroller scrollRectToVisible:frame animated:YES];


-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

    int page = scrollView.contentOffset.x/scrollView.frame.size.width;
    pageControl.currentPage=page;


- (void) viewWillAppear:(BOOL)animated

    [super viewWillAppear:YES];
    arrayCount = [array count];
    scroller.delegate=self;
    scroller.pagingEnabled=YES;
    scroller.directionalLockEnabled=YES;
    scroller.showsHorizontalScrollIndicator=NO;
    scroller.showsVerticalScrollIndicator=NO;

    //should have an array of photo objects and the number of objects, correct?
    scrollWidth = 0;
    scroller.contentSize=CGSizeMake(arrayCount*scroller.frame.size.width, scroller.frame.size.height);

    for (int i = 0; i < arrayCount;i++) 
        PhotoViewController *pvc = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil];        
        UIImageView *scrollImageView = [[UIImageView alloc] initWithFrame:CGRectOffset(scroller.bounds, scrollWidth, 0)];
        CGRect rect = scrollImageView.frame;
        pvc.view.frame  = rect;
        [pvc view];
        pvc.label.textColor = [UIColor whiteColor];
        id individualPhoto = [array objectAtIndex:i];
        NSLog(@"%@",individualPhoto);
        NSArray *keys=[individualPhoto allKeys];
        NSLog(@"%@",keys);
        NSString *imageURL=[individualPhoto objectForKey:@"source"];
        //here you can use this imageURL to get image-data and display it in imageView  
        NSURL *url = [NSURL URLWithString:imageURL];
        NSData  *data = [NSData dataWithContentsOfURL:url];
        pvc.imageView.image = [[UIImage alloc] initWithData:data];
        pvc.label.text = [NSString stringWithFormat:@"Photo Number: %i", arrayCount];
        //check to make sure the proper URL was passed
        //I have an imageView next to the UIScrollView to test whether that works - it does.
        [scroller addSubview:pvc.view];
        [scrollImageView release];
        [pvc release];
        scrollWidth += scroller.frame.size.width;
    

    if (arrayCount > 3) 
        pageControl.numberOfPages=3;
     else 
    pageControl.numberOfPages=arrayCount;
    
    pageControl.currentPage=0;
    [self.view addSubview:scroller];

【问题讨论】:

页面控件是滚动视图的子视图吗? 没有。这会导致页面控件随内容滚动。使其成为滚动视图的兄弟。 太棒了。谢谢@omz - 现在可以使用了。但是,附带说明一下,我必须使滚动视图的背景颜色清晰。因为无论兄弟顺序如何,滚动视图总是出现在页面控件的顶部。这是因为我打电话给[self.view addSubview:scroller] ...如果我在IB中创建它,是否还需要这个电话?当我删除它并将 ScrollView 的背景更改回黑色时,就会出现页面控件。我只是想确认页面控件最初没有出现,因为我每次加载时都添加了子视图,对吗? 顺便说一句,您是否要将您的答案添加为问题的答案,以便我给予您信任并将此问题标记为已回答? addSubview 如果它已经在 nib 文件中,则不需要它。它隐含地将添加到前面的视图。 【参考方案1】:

您不应该将页面控件添加为滚动视图的子视图,这会导致它随着内容滚动。改为使其成为滚动视图的兄弟。

【讨论】:

以上是关于iPhone Page Control 仅显示在 UIScrollView 的第一页上的主要内容,如果未能解决你的问题,请参考以下文章

为啥仅在移动 Web 浏览器中显示 Access-Control-Allow-Origin 不允许显示 Origin?

在 iPhone 6+ 上仅纵向显示 UIPopover

仅 iPhone 应用程序中的 UIWebView 显示在 iPad 上

AssetCatalog LaunchImage 仅横向 - iPhone 4S/5/5S 未显示

强制 UISplitViewController 始终以横向显示主视图(仅)(在 iPhone 6 Plus 上)

发布的应用在应用商店中显示与 iPad 兼容,但仅针对 iPhone 编译