Ios 何时使用UITableView?

Ios 何时使用UITableView?,ios,uitableview,Ios,Uitableview,如果我想实现如下视图,我应该使用UITableView还是简单地使用UIView、UILabels。。。并继续自动布局它们? 我有点困惑,什么时候是使用UITableView的最佳时机。仅用于填充单行项目列表(带有小图片和/或附件) 我没有找到关于如何将UITableView定制为如下所示的好教程。这是一个好的选择吗?有什么建议吗 这不是使用UITableView的正确位置。UITableView用于您提到的单行项目列表。虽然这看起来很乏味,但最好是使用标签、视图和按钮来创建界面 您还可以查看集

如果我想实现如下视图,我应该使用UITableView还是简单地使用UIView、UILabels。。。并继续自动布局它们?

我有点困惑,什么时候是使用UITableView的最佳时机。仅用于填充单行项目列表(带有小图片和/或附件)

我没有找到关于如何将UITableView定制为如下所示的好教程。这是一个好的选择吗?有什么建议吗


这不是使用UITableView的正确位置。UITableView用于您提到的单行项目列表。虽然这看起来很乏味,但最好是使用标签、视图和按钮来创建界面


您还可以查看集合视图。我认为这不适合您的需要,但值得了解:。

当您有一列重复元素的行时,表视图非常好。每一行可以是简单的,也可以是复杂的(它们当然不限于单行项目!)

当您想要对布局进行更多控制时,集合视图非常好;多柱网轴线,甚至圆形布局

当元素堆叠在列中但不重复时,仍然可以使用表视图,但由于iOS 9,使用UIStackView更简单

在堆栈视图场景中,我发现可以方便地将布局分成多个部分(例如,照片、描述、烹饪说明、配料、营养等适用于应用程序的任何内容)。每个部分都是单独构建的,可以是代码,也可以是XIB。如果没有一个大规模的XIB,未来的改变和插入就会简化。每个部分都被加载并添加到堆栈视图中,该堆栈视图本身是滚动视图(视图控制器视图的子视图)的子视图。由于这些部分是不重复的,因此可以将视图控制器设置为“文件的所有者”,并将视图链接到输出,这使得数据填充变得简单


在你的屏幕截图中,我不知道是否有任何可滚动的区域,或者这是一个固定的内容。如果是固定内容,我会用自动布局在IB中进行布局。我很想在这两个专栏中使用两个堆栈视图(观看2015年的UIStackView简介WWDC视频),尽管我在IB中从来没有使用过堆栈视图,我可能会选择使用基本的自动布局。

在您的情况下,我建议您只使用UIViewsUILabelsUIImages,所有这些都在一个滚动视图中

这将为您提供UITableView所具有的滚动功能,并且更易于处理数据

或者,您也可以使用UICollectionView,这会产生相同的结果

稍微解释一下UITableViewvsUICollectionView

更常见的是,人们使用它来创建网格中显示的大量不同视图。(这可以使用UITableView创建,但过于复杂)

另一方面,更常见的情况是人们使用UITableView在一列中显示项目列表

但是,正如我所说,如果您想将一些信息显示为网格,另一些显示为列表,您也可以将两者混合使用

所以在这种情况下,您应该在UITableView内部使用UICollectionView,要做到这一点,您需要记住UITableView可以有许多不同的单元格类型和部分

代码的一个示例是:

-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    id item = [self getItem:indexPath];

    id cell = [tableView dequeueReusableCellWithIdentifier:[[self getCellClassForItem:item] description]];
    [self setDataToCell:cell withData:item];

    return cell;
}
此方法(
-(Class)getCellClassForItem:(id)item;
-(void)setDataToCell:(id)cell with Data:(id)item;
)对于通知tableview应如何处理此类单元格非常重要,因此:

-(Class) getCellClassForItem:(id)item {
    if ([item isKindOfClass:[YOUR_CELL_CLASS_1_MODEL class]]) {
        return [YOUR_CELL_CLASS_1 class];
    } else if ([item isKindOfClass:[YOUR_CELL_CLASS_2_MODEL class]]) {
        return [YOUR_CELL_CLASS_2 class];
    } else {
        return nil;
    }
}


-(void)setDataToCell:(id)cell withData:(id)item {
    if ([cell isKindOfClass:[YOUR_CELL_CLASS_1 class]]) {
        //populate your cell
    } else if ([cell isKindOfClass:[YOUR_CELL_CLASS_2 class]]) {
        //populate your cell
    } 
}
不要忘记实施强制性方法,如:

-(NSArray *)getCellsClasses {
    return @[YOUR_CELL_CLASS_1.class, YOUR_CELL_CLASS_2.class];
}

改用UICollection视图。因为您的两个视图是水平放置的。如果您必须添加更多视图,可以直接添加集合视图单元格。 自定义单元格并在同一单元格中使用自动布局。
如果用于描述的功能可能在数量上有所不同,则可以使用表视图进行描述。

使用
UIStackView
在手动布局时也会使事情变得更容易。