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 应用程序中的 UIWebView 显示在 iPad 上
AssetCatalog LaunchImage 仅横向 - iPhone 4S/5/5S 未显示