我在向UIScrollView动态添加子视图时遇到了很多麻烦。滚动视图适用于在NIB中创建的内容,但由于要显示的子视图取决于我的应用程序中的数据(图像,标签,单选按钮等的混合),我需要能够动态创建和显示它们。
根据我读过的所有内容,它在各种网站和Apple文档中看起来非常简单。在视图控制器的viewDidLoad中,我添加了以下代码,
UILabel *testLabel = [[UILabel alloc] init];
[testLabel setFrame:CGRectMake(50, 50, 100, 40)];
[testLabel setText:@"My Test label"];
[scrollView addSubview:testLabel];
[testLabel release];
标签根本不会出现在滚动视图中,但如果我将testLabel添加到self.view,则会出现(但不会显示在滚动内容中)。我甚至尝试将代码添加到viewDidAppear,以防我误解了没有运气的事件顺序。
当我检查调试器时,我注意到滚动视图的地址是0x0,我认为这意味着它因某种原因而无效,这可以解释为什么它不起作用。我假设如果我将此scrollView指针连接到IB中的实际滚动视图,它将自动分配正确的地址。这是不正确的?如果是这种情况,我该如何获取视图的地址?
- 更新 -
感谢所有的反馈。我按照每个人的建议检查了一切,这当然都是正确的。我不需要设置内容的大小,因为我在NIB中有一些其他虚拟标签(用于测试滚动工作)。但我会记得以后: - )
有趣的是,虽然在再次检查代码并且没有进行任何更改之后,我再次运行它并且它刚刚起作用!!不知道为什么,但如果我弄清楚的话,我会发布原因......
答案 0 :(得分:3)
使用scrollView时,您需要通过执行以下操作来设置内容大小:
scrollView.contentSize = CGSizeMake(@width,@height);
在这种情况下,如果你想看标签
,大小应该大于50,50希望有所帮助
答案 1 :(得分:2)
如您的问题中所述您正在使用已在XIB中添加的滚动视图。
当您将出口声明为IBOultlet UIScrollView * scrlvDynamicContent;
并将其连接到界面构建器中的scrollview,理想情况下,在调用viewdidLoad方法后,您将获得分配的scrollview。
所以做某事
-(void)viewDidLoad{
[super viewDidLoad];
[self createDynamicView];
}
您可以在其中生成动态视图,如下所示
-(void)createDynamicView{
CGFloat yOffset = 0;
for (int i=0;i<5;i++) {
yOffset += 5;
UILabel* lblHeaderTitle = [[UILabel alloc] initWithFrame:CGRectMake(8, yOffset, 310, 21)];
[lblHeaderTitle setTextAlignment:UITextAlignmentLeft];
[lblHeaderTitle setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16.0f]];
[lblHeaderTitle setText:[currentDict valueForKey:@"TITLE"]];
[lblHeaderTitle setTextColor:[UIColor blackColor]];
[scrlvDynamicContent addSubview:lblHeaderTitle];
[lblHeaderTitle release];
//INCREMNET in yOffset
yOffset += 25;
[scrlvDynamicContent setContentSize:CGSizeMake(320, yOffset)];
}
只需确保scrlvDynamicContent已正确连接到其文件所有者的插座
答案 2 :(得分:0)
[scrollView setFrame:CGRectMake(0,0,320,460)];
[scrollView setContentSize:CGSizeMake(100, 40)];
[self.view addSubview:scrollView];
UILabel *testLabel = [[UILabel alloc] init];
[testLabel setFrame:CGRectMake(50, 50, 100, 40)];
[testLabel setText:@"My Test label"];
[scrollView addSubview:testLabel];
[testLabel release];