2011-10-05 48 views
6

我在动态添加子视图到UIScrollView时遇到了很多麻烦。滚动视图对在NIB中创建的内容工作正常,但由于要显示的子视图取决于我的应用程序中的数据(图像,标签,单选按钮等的混合),我需要能够动态地创建和显示它们。在UIScrollView中动态添加子视图不出现

根据我读过的所有内容,它在各种网站和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,我认为它的意思是null,由于某种原因,这可以解释为什么它不工作。我假设如果我将这个scrollView指针连接到IB的实际滚动视图,它会自动分配正确的地址。这是不正确的?如果是这种情况,我该如何获取视图的地址?

- UPDATE -
感谢您的所有反馈。我按照每个人的建议检查了一切,当然这一切都是正确的。我不需要设置内容的大小,因为我在NIB中有一些其他虚拟标签(用于测试滚动是否正常)。但我会记住,在以后的日子里:-)

有趣的是,虽然在再次检查代码并没有做任何改变之后,我再次运行它,它只是工作!不知道为什么,但我会后的原因如果我看着办吧......

+0

您是先拨打[super viewDidLoad]吗? – Colin

+0

你可以发表更多的代码吗?特别是,我对a)如何初始化UIScrollView实例感兴趣,以及b)您已将scrollView附加到self.view的父ViewController中的位置。谢谢! –

+0

@AsimIhsan我没有动态创建滚动视图本身,只有子视图。我使用Interface Builder在UIViewController中创建了滚动视图,并将其设置在那里,因为我无法以其他方式使用它。 – richard

回答

3

当您使用滚动视图,你需要通过执行来设置内容大小:

scrollView.contentSize = CGSizeMake(@width,@height); 

在这种情况下应该大小更大,如果你想看到的标签

希望它帮助

2

正如你的问题描述您与您的厦门国际银行已经添加了一个滚动视图工作50,50。

当你声明一个插座为IBOultlet UIScrollView * scrlvDynamicContent;

并将其连接到界面生成器中的滚动视图,理想情况下,您将在调用viewdidLoad方法后获得分配的滚动视图。

这样的东西作为

-(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已正确连接到其出口设置为它的文件所有者生成动态视图

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]; 
相关问题