10

这应该很容易,但我遇到了麻烦。

我有一个带有单元格的静态 UITableView,如果不需要,我想以编程方式将其删除。

我有一个 IBOutlet

IBOutlet UITableViewCell * cell15;

我可以通过调用删除它

cell15.hidden = true;

这隐藏了它,但在单元格曾经所在的位置留下了一个空白空间,我无法摆脱它。

也许黑客会将其高度更改为0?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:indexPath
{
//what would I put here?
}

非常感谢!

4

7 回答 7

13

您无法在数据源中真正处理此问题,因为使用静态表您甚至不实现数据源方法。高度是要走的路。

试试这个:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell == cell15 && cell15ShouldBeHidden) //BOOL saying cell should be hidden
        return 0.0;
    else
        return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

更新

看来,在自动布局下,这可能不是最好的解决方案。这里有一个替代答案可能会有所帮助。

于 2012-04-25T07:01:16.567 回答
6

您可以将tableView:willDisplayCellandtableView:heightForRowAtIndexPath与单元格标识符一起使用来显示/隐藏静态tableview单元格,但您必须实现对 的heightForRowAtIndexPath引用super,而不是对self。这两种方法对我来说很好用:

(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell.reuseIdentifier.description isEqualToString:@"cellCelda1"]) {
    [cell setHidden:YES];
    }
}

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
    if ([cell.reuseIdentifier.description isEqualToString:@"cellCelda1"]) {
        return 0;
}
    return cell.frame.size.height;
}
于 2012-12-26T19:51:26.350 回答
3

根据您的表应该如何工作,在您的数据源中,您可以tableView:numberOfRowsInSection:根据您的必要逻辑实现为该部分返回 0 行。

更新您的评论:

section 参数将在调用您的实现时由 iOS 填充,因此您只需要一个开关来处理您删除/隐藏行的部分。下面的例子:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch(section) {
        case 0:  // first section of your table, change for your situation
             return 0;
        default:
             return 0;
    }
}
于 2012-04-25T06:15:06.827 回答
0

它仅适用于恒定电池

-(void)tableViewSearchPeopleCellHide:(BOOL)hide{

    searchCellShouldBeHidden=hide;
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    cell.hidden=hide;
    self.searchPeople.hidden=hide;//UILabel
    [self.tableView reloadData];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (searchCellShouldBeHidden) //BOOL saying cell should be hidden
        return 0.0;
    else
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
于 2014-08-05T08:54:22.167 回答
0

您可以做的第一件事是从情节提要中标记要隐藏的单元格。放一些您可以识别的标准数字。

添加此代码。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
    if (cell.tag==10) { //I have put 10 for some static cell.       
                cell.hidden=YES;
                return 0;         

    }
     cell.hidden = NO;
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
于 2015-05-13T06:41:21.330 回答
0

将要隐藏的单元格设置为隐藏在代码中的某个位置。添加此代码:(如果您的单元格具有不同的行高,那么您需要覆盖更多功能)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int rowCount=0;
    for ( int row=0; row<[super tableView:tableView numberOfRowsInSection:section]; ++row){
        NSIndexPath* path=[NSIndexPath indexPathForRow:row inSection:section];
        UITableViewCell* cell=[super tableView:tableView cellForRowAtIndexPath:path];
        if (!cell.hidden){
            ++rowCount;
        }
    }
    return rowCount;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    int realRow=-1;
    for ( int row=0; row<[super tableView:tableView numberOfRowsInSection:indexPath.section]; ++row){
        NSIndexPath* path=[NSIndexPath indexPathForRow:row inSection:indexPath.section];
        UITableViewCell* cell=[super tableView:tableView cellForRowAtIndexPath:path];
        if (!cell.hidden){
            ++realRow;
        }
        if (realRow==indexPath.row)
            return cell;
    }
    return nil;
}
于 2015-09-23T09:13:12.610 回答
0

使用索引路径识别 tableview 高度委托中的单元格并返回 0

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        if someCondition {

            if indexPath.row == 1 || indexPath.row == 2 || indexPath.row == 3 {
                return 0 
            }

        }else{

            if indexPath.row == 4 {
                return 0 
            }

        }


    return super.tableView(tableView, heightForRowAt: indexPath)
}
于 2019-04-19T11:55:24.737 回答