Ios 是否仅可通过替代HeightForRowatineXpath更改静态UITableViewCell的高度?

Ios 是否仅可通过替代HeightForRowatineXpath更改静态UITableViewCell的高度?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我已经浏览了很多示例,介绍了如何通过覆盖高度来隐藏静态UITableViewCell,现在我已经让它工作了,但它看起来太麻烦了,我想看看我是否做错了什么 我有一个UITableViewController,它的表视图大约有8行。我的应用程序中的这个屏幕显示一个对象,例如一行是描述,一行是图像,一行是地图视图,等等。所有的行都是静态的 在某些情况下,显示的某些对象没有贴图,因此我想隐藏包含mapview的行。由于它是一个静态行,我想通过为该行设置outlet属性(例如,@property(弱的、非

我已经浏览了很多示例,介绍了如何通过覆盖
高度来隐藏静态
UITableViewCell
,现在我已经让它工作了,但它看起来太麻烦了,我想看看我是否做错了什么

我有一个
UITableViewController
,它的表视图大约有8行。我的应用程序中的这个屏幕显示一个对象,例如一行是描述,一行是图像,一行是地图视图,等等。所有的行都是静态的

在某些情况下,显示的某些对象没有贴图,因此我想隐藏包含
mapview
的行。由于它是一个静态行,我想通过为该行设置outlet属性(例如,
@property(弱的、非原子的)IBOutlet UITableViewCell*mapViewRow;
),我可以以某种方式将该行的高度设置为0或在
viewDidLoad
视图中隐藏该行。但是,似乎唯一的方法是重写
heightforrowatinexpath
方法,这有点烦人,因为我需要在代码中硬编码地图行的索引,例如

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 6 && self.displayItem.shouldHideMap) {
        return 0;
    }
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

当然,这没什么大不了的,但在
表视图中调整静态行大小的整个方法似乎都不符合首先在情节提要中设置静态行的目的。

编辑-我的答案背后的基本原理

要更改行的高度,必须重新加载整个表或包含该行的子集。B/c表中有一行高度为零有点奇怪,我更喜欢修改数据源,使该行在表中不存在

有很多方法可以做到这一点。您可以从displayItem构建一个数组,其中数组中的每一行对应于表中的一行,其中包含适当的数据。您将重建此数组,然后调用
[tableView reloadData]
。我最初的答案还将通过将每个数据元素视为一个包含0或1行的部分来消除不需要的行

原始答案

您的tableview是普通样式还是分组样式?如果是普通样式,则可以将每一行视为包含0行或1行的节。在tableView数据源和委托方法中,您可以使用节索引来标识您关心该节的
self.displayItem
中的数据

您的代码类似于:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 8; // max number of possible rows in table
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger rows = 1;

    // set self.mapSectionIndex during initialization or hard code it
    if (section == self.mapSectionIndex && self.displayItem.shouldHideMap) {
        rows = 0;
    }
    return rows;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:indexPath
{
    return 60.0f; // whatever you want the height to be
}

// also modify tableView:cellForRowAtIndexPath: and any other tableView delegate and dataSource methods appropriately

您可以覆盖索引路径中的行高度,只需在其中写入
返回UITableViewAutomaticDimension这将使单元格自动计算高度,因为
UILabel
高度为>=。这对我来说很有效。

您有带静态行的静态tableView,所以硬编码索引应该可以。我使用的是enum,它隐藏绝对数。