在UIScrollView中动态添加的子视图未显示

时间:2011-10-05 09:14:20

标签: iphone ios

我在向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中有一些其他虚拟标签(用于测试滚动工作)。但我会记得以后: - )

有趣的是,虽然在再次检查代码并且没有进行任何更改之后,我再次运行它并且它刚刚起作用!!不知道为什么,但如果我弄清楚的话,我会发布原因......

3 个答案:

答案 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];