tableview ios内部的scrollview性能不佳

tableview ios内部的scrollview性能不佳,ios,objective-c,uitableview,memory,uiscrollview,Ios,Objective C,Uitableview,Memory,Uiscrollview,我对表视图及其响应有问题,因为每个单元格都有包含72个标签的scrollView。我知道scrollView需要先加载所有元素,然后再加载到屏幕上,因为表视图速度很慢,但是有没有一种方法可以不在每次创建标签时分配和调用initWithFrame方法?我试图用不同的框架重复使用标签,但它不起作用 下面是我需要优化的代码,以便更快地创建标签 int listSize = 36; for(int i=0;i<listSize;i++){ UILabel *lab

我对表视图及其响应有问题,因为每个单元格都有包含72个标签的scrollView。我知道scrollView需要先加载所有元素,然后再加载到屏幕上,因为表视图速度很慢,但是有没有一种方法可以不在每次创建标签时分配和调用initWithFrame方法?我试图用不同的框架重复使用标签,但它不起作用

下面是我需要优化的代码,以便更快地创建标签

    int listSize = 36;

    for(int i=0;i<listSize;i++){
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0+i*200, 0, 200, 80)];
        label.text = @"HELLO";
        label.textColor = [UIColor blackColor];
        label.backgroundColor = [UIColor clearColor];
        label.textAlignment = NSTextAlignmentCenter;
        label.font = [UIFont fontWithName:@"ArialMT" size:18];
        [scrolView addSubview:label];

        UILabel *grayBorderInFront = [[UILabel alloc] initWithFrame:CGRectMake(2+i*200, 5, 1, scrolView.frame.size.height-10)];
        grayBorderInFront.text = @"";
        grayBorderInFront.backgroundColor = [UIColor lightGrayColor];
        [scrolView addSubview:grayBorderInFront];
    }
int listSize=36;

对于(inti=0;i将标签保存在一个数组中,然后仅将它们添加到视图中。或者您甚至可以缓存整个scrollview

编辑: 您保留一个正在更新的值列表。对于在scrollview中创建的所有标签,您设置了标签label1.tag=4;(从1开始,而不是从零开始,因为0是默认值,其他视图也有它)

然后,在cellForViewAtIndexPath中,不是每次都创建一个新标签,而是使用[cell viewWithTag:]获取标签,并获取标签的引用。唯一需要做的是更改标签的值。您还可以将标签用作数组中的索引:

int index = 3; // third label
[(UILabel*)[cell viewWithTag:index+1] setText:[myLabelsArray objectAtIndex:index]];

您始终可以有一个TableView,每个单元格都有一个水平集合视图

将“滚动方向”属性设置为“水平”,并使用


CollectionView将保证您的标签(即单元格)得到重用,并且您的工作效率很高。

几周前,我使用CollectionView和自定义布局为iPhone应用程序实现了EPG布局。 在iPad应用程序上,其他开发人员使用带有collectionView流布局阵列的scrollView实现了EPG

自定义布局的效果更好

您提到您需要iOS 5,因此您可以尝试将以下开源替换为集合视图:

您想要实现什么?如果您向我们展示一些代码,我们可能会帮助您。我希望我的数据可以在滚动视图(左和右)中滚动,但我也想通过列表视图向下滚动。但目前,向下或向上滚动时速度太慢。您不应为每个单元格创建新标签,而应将UITableViewCell子类化,并在表格滚动时重置文本。您可以覆盖
prepareforeuse
将单元格重置为默认状态,然后只需设置该行的标签。仅将可见标签放入视图中。然后实现委托功能
scrollviewdidscroll
,并在需要可见的情况下创建新标签。我创建了72个标签只是为了测试。我需要从服务器获取一些数据,标签的数量将是随机数,因此我无法创建数组。每次输入该值时查看我从服务器接收更新并显示内容。列表和滚动在一段时间后将不会刷新。是的,我的建议是缓存对象,这样您就不必一直取消/分配它们。您仍然可以更改它们的值…我尝试创建标签数组,但现在它们没有显示。我在t时只能在1个滚动视图中看到标签时间。我知道,但是,我的要求是iOS 5。嗯,你也可以使用水平的tableview-基本的想法是创建一个EPG,在左边有cannel的图像,在右边有可滚动的部分,这样用户就可以滚动整个时间线并查看程序。我不需要整个表格来滚动,只有一部分(每个单元格中有滚动视图).People为iOS 4.3移植了CollectionView(也许它甚至可以在iOS 4.0中工作,我没有测试它):