UITableViewRow高度0在ios7和ios6上显示不同

时间:2014-01-16 07:55:40

标签: iphone ios6 uitableview ios7 xcode5

我正在研究xcode 5和ios7,有一个包含7个部分的表视图,我必须在条件上显示/隐藏三个部分,为此我已经完成了部分行的高度为0,它完美地工作在ios7上,但是当我在ios6上运行时,也会查看高度为0的行。请告诉我如何在ios6中防止这种情况。

IOS7查看 ios7 view

在ios6中,显示隐藏在ios 7中的paypal行。当没有被选中时,我不必显示这个。

ios6 view

代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section==3 && !isadvisor)
    { return 0;}
    if(indexPath.section==4 && !isadvisor)
    {return 0;}
    if(indexPath.section==5 && !isadvisor)
    { return 0;}
    if (indexPath.section==0 && indexPath.row==0) {
        return 110;
    }
    if (indexPath.section==3 && indexPath.row==2) {
        return 125;
    }
    return 40;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{   return 7;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section==0)     return 8;
    else if(section==1) return [arr3 count]+1;
    else if(section==2) return 1;
    else if(section==3) return 5;
    else if(section==4) return [arr1 count]+1;
    else if(section==5) return [arr2 count]+1;
    else if(section==6) return 1;

    else return 0;
    return 0;
}

请帮助我该如何解决这个问题。 任何建议都将受到高度赞赏。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不会使隐藏部分中的行的高度为0,而是更改部分的数量,以便这些部分根本不在tableview中。这将改善表格视图的性能,并消除单元格大小为0时的任何奇怪现象。

所以,在

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{   return 7;
}

而不是只是一直返回7:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{   return (isadvisor ? 7 : 4);
}

您还需要在section节点的单元格和indexPath方法的单元格中容纳部分的更改。

一种可能更简洁的方法是对视图控制器进行子类化,这样如果用户是顾问程序,则实例化使用7行逻辑的不同视图控制器,否则基本视图控制器使用4行逻辑。这样可以将'isadvisor'测试的数量减少到只有一个。