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

Iphone 在未显示的UIScrollView中动态添加的子视图,iphone,ios,Iphone,Ios,我在动态地将子视图添加到UIScrollView时遇到了很多问题。滚动视图适用于NIB中创建的内容,但由于要显示的子视图取决于应用程序中的数据(图像、标签、单选按钮等的混合),因此我需要能够动态创建和显示它们 根据我所读到的一切,在不同的网站和苹果的文档中,这似乎非常简单。在视图控制器的viewDidLoad中,我添加了以下代码 UILabel *testLabel = [[UILabel alloc] init]; [testLabel setFrame:CGRectMake(50, 50,

我在动态地将子视图添加到UIScrollView时遇到了很多问题。滚动视图适用于NIB中创建的内容,但由于要显示的子视图取决于应用程序中的数据(图像、标签、单选按钮等的混合),因此我需要能够动态创建和显示它们

根据我所读到的一切,在不同的网站和苹果的文档中,这似乎非常简单。在视图控制器的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,它就会出现(但显然不会出现在滚动内容中)。我甚至尝试将代码添加到ViewDidEmerge中,以防我误解了事件的顺序,但运气不佳

当我检查调试器时,我注意到scroll视图的地址是0x0,我认为这意味着它为null,这可以解释为什么它不工作。我假设,如果我将这个scrollView指针连接到IB中的实际滚动视图,它将自动分配正确的地址。这是不对的吗?如果是这种情况,如何获取视图的地址

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


不过,有趣的是,在再次检查代码并且没有做任何更改之后,我再次运行了它,它就工作了!!不知道为什么,但如果我能找到原因,我会发布原因…

当您使用scrollView时,您需要通过执行以下操作来设置内容大小:

scrollView.contentSize = CGSizeMake(@width,@height);
在这种情况下,如果你想看到标签,尺寸应该大于50,50


希望对您有所帮助

如您的问题所述,您正在使用您在XIB中添加的scrollview

当您将一个插座声明为iBulllet UIScrollView*scrlvDynamicContent

并将其连接到interface builder中的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)];

}
-(void)创建动态视图{
CGFloat yOffset=0;

对于(int i=0;您是先调用[super viewDidLoad]吗?您能发布更多代码吗?特别是,我对a感兴趣)如何初始化UIScrollView实例,以及b)父视图控制器中将scrollView附加到self.view的点。谢谢!@AsimIhsan我没有动态创建滚动视图本身,只创建子视图。我使用Interface Builder在UIViewController中创建滚动视图,并在其中进行设置,因为我没有创建滚动视图科林:是的,它叫德里查德。我也遇到了同样的问题。你能帮我吗?
[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];