UITableView巧用技巧

作者: 20b347b28fc9 | 来源:发表于2016-06-14 23:30 被阅读66次

    UITableView巧用技巧

    1.取消屏幕内多余横线

    • 当tableView数据未能满一屏幕的时候,UITableView会显示多余的横线,去掉多余的线同时又让有数据的cell有线,可以添加如下代码即可解决:
    self.tableView.tableFooterView = [[UIView alloc]init];
    

    2.tableView分割线顶格问题解决

    • UITableView分割线默认不是直接顶格到左边,如果想让分割线顶格的话,iOS7之前我们只需要加上下面代码:
    self.tableView.separatorInset = UIEdgeInsetsZero;
    
    • 但这个方法在iOS7失效了,具体解决方法有如下常用两个:
    方法一:去掉系统的分割线,自定义cell的分割线
    • 这个应该是现在程序员最常用的方法吧,因为我们平时使用的cell大都是自定义的,然后在自定义cell的最下面加上一个高度为1的UIView来“冒充”分割线也是不错的方法
    • 自定义的话还有一种方法就是将cell内容的高度小于cell的高度1个单位,用cell的背景色或者tableview的背景色“冒充”分割线,这种方法也比较快
    方法er:设置分割线的内边剧
    • 在下面的两个方法中分别设置tableView和cell的separatorInse和layoutMargins
    - (void)viewDidLayoutSubviews{
        [super viewDidLayoutSubviews];
        
        // 让分割线顶格
        self.tableV.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
        self.tableV.layoutMargins = UIEdgeInsetsMake(0, 0, 0, 0);
    
    }
    
    /** UITableViewDelegate */
    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
        cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
        cell.layoutMargins = UIEdgeInsetsMake(0, 0, 0, 0);
    }
    

    3.动态计算cell高度

    – 很多情况下我们的UITableViewCell的高度是不确定的,如说一些聊天的界面,需要我们去动态的计算cell的高度,一般来说的话需要我们在-heightForRowAtIndexPath代理方法中返回你计算好的cell高度

    • 当cell添加了约束后,我们可以通过下面代码让系统自动帮我们计算高度并显示相应高度:
    self.tableView.estimatedRowHeight = 150;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    
    注意:如果你设置了上面属性,但cell并没有动态返回高度,请检查下cell内容的约束。

    4.cell点击切换内容伸缩

    • 我们的cell 有时候单单显示文字,而且文字有时单行,要求点击时出现多行全部文字内容,我们就可以在下面方法中通过改变cell中label的numberOfLines来实现动画效果
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        
        // 取消选中
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        
        ERCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        
        // 这里我是给cell的label添加了tag值,你也可以通过脱线获取label属性
        UILabel *label = [cell viewWithTag:1000];
        
        // 刷新数据
        [tableView beginUpdates];
        
        // 切换numberOfLines
        if (label.numberOfLines == 0) {
            label.numberOfLines = 1;
        }else{
            label.numberOfLines = 0;
        }
        // 结束刷新数据
        [tableView endUpdates];
        
    //    [tableView reloadData];
    }
    
    注意:我这里用的刷新数据方法是 [tableView beginUpdates]; 和[tableView endUpdates];结合使用的,而不是直接使用[tableView reloadData]; 使用前者好处有如下:
    • 1.前者自带动画效果
    • 2.前者更流畅

    相关文章

      网友评论

        本文标题:UITableView巧用技巧

        本文链接:https://www.haomeiwen.com/subject/zxwudttx.html