如何获取在情节提要中为 tableView 静态单元格设置的预设高度?

Posted

技术标签:

【中文标题】如何获取在情节提要中为 tableView 静态单元格设置的预设高度?【英文标题】:How to get the preset height that is set in the storyboard for tableView static Cell? 【发布时间】:2012-08-24 08:21:11 【问题描述】:

试图隐藏和自定义静态单元格的高度。我知道这可能不是最好的方法。如果有人知道更好的方法,请指教。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath


    if (![Mode isEqualToString:@"HIDE"]) 
        if (indexPath.row == 2) 
            return 0.0;
        
    

    return "DEFAUlT_HEIGHT";


如何从情节提要中获取默认高度?故事板中每个单元格的高度都不同。反正有更好的定制吗?提前致谢。

【问题讨论】:

【参考方案1】:

看看这个帖子:Hide static cells

它谈到了以编程方式隐藏静态单元格。这是公认的答案:

1.隐藏单元格

没有办法直接隐藏单元格。 UITableViewController 是 提供静态单元格的数据源,当前存在 没有办法告诉它“不提供单元格 x”。所以我们必须提供我们的 自己的数据源,按顺序委托给 UITableViewController 获取静态单元格。

最简单的方法是继承 UITableViewController,并覆盖所有方法 隐藏单元格时需要采取不同的行为。

在最简单的情况下(单节表,所有单元格具有相同的 高度),这将是这样的:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     
    return [super tableView:tableView numberOfRowsInSection:section] - numberOfCellsHidden; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    // Recalculate indexPath based on hidden cells
    indexPath = [self offsetIndexPath:indexPath];

    return [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

- (NSIndexPath*)offsetIndexPath:(NSIndexPath*)indexPath 
    int offsetSection = indexPath.section; // Also offset section if you intend to hide whole sections
    int numberOfCellsHiddenAbove = ... // Calculate how many cells are hidden above the given indexPath.row
    int offsetRow = indexPath.row + numberOfCellsHiddenAbove;

    return [NSIndexPathindexPathForRow:offsetRow inSection:offsetSection]; 

如果您的表格有多个部分,或者 单元格具有不同的高度,您需要覆盖更多方法。 同样的原则在这里适用:您需要偏移 indexPath, section 并在委派给超级之前行。

还要记住,方法的 indexPath 参数 didSelectRowAtIndexPath: 对于同一个单元格会有所不同, 取决于状态(即隐藏的单元格数量)。所以它是 总是抵消任何 indexPath 参数和工作可能是个好主意 使用这些值。

2。动画变化

正如 Gareth 已经说过的,如果您制作动画,则会出现重大故障 使用 reloadSections:withRowAnimation: 方法进行更改。

我发现如果你调用 reloadData: 紧接着, 动画得到了很大改善(只剩下小故障)。该表是 动画后正确显示。

所以我正在做的是:

- (void)changeState 
     // Change state so cells are hidden/unhidden
     ...

    // Reload all sections
    NSIndexSet* reloadSet = [NSIndexSetindexSetWithIndexesInRange:NSMakeRange(0, [self numberOfSectionsInTableView:tableView])];

    [tableView reloadSections:reloadSet withRowAnimation:UITableViewRowAnimationAutomatic];
    [tableView reloadData]; 

如果这有帮助,请去那里投票 henning77 的答案。

【讨论】:

以上是关于如何获取在情节提要中为 tableView 静态单元格设置的预设高度?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 静态 UITableView 单元格在情节提要中为空白

我可以在情节提要中设置分组的 tableView 部分编号吗?

tableView 与 imageView 与情节提要?

在 Swift 中为嵌入式 tableView 中的 segue 做准备

如何在情节提要中为uilabel设置大于300的字体大小?

如何在情节提要中将属性 tableView 连接到 UITableView