美文网首页
UITableView方法的执行顺序

UITableView方法的执行顺序

作者: Mr_Watson | 来源:发表于2018-04-21 17:32 被阅读0次

    UITableView方法执行顺序
    一、估算方法实现 估算高度不为0

    1.确定单元数  
    numberOfSectionsInTableView
    
    numberOfSectionsInTableView
    /
    2.确定每单元的表头尾预估高度
    estimatedHeightForHeaderInSection - section
    estimatedHeightForFooterInSection - section
    3.确定行数
    numberOfRowsInSection - section
    4.确定cell预估高度
    estimatedHeightForRow - section - row * rowNumber
    / *sectionNumber
    
    numberOfSectionsInTableView
    /
    estimatedHeightForHeaderInSection - section
    estimatedHeightForFooterInSection - section
    numberOfRowsInSection - section
    estimatedHeightForRow - section - row * rowNumber
    / *sectionNumber
    
    /
    5.获取cell
    cellForRowAtIndexPath - section - row
    6.返回cell的高度
    heightForRow - section - row
    7.返回footerView的高度
    heightForFooter - section  — > - section - 0
    8.cell将在屏幕显示
    willDisplayCell - section - row
    / *sectionNumber *rowNumber
    
    /
    9.返回headerView的高度
    heightForHeader - section
    10.显示headerView
    viewForHeaderInSection - section
    11.headerView将在屏幕显示
    willDisplayHeaderView - section
    12.显示footerView
    viewForFooterInSection - section
    13.footerView将在屏幕显示
    willDisplayFooterView - section
    / *sectionNumber
    
    /
    14.再次返回cell的高度
    heightForRow - section - row
    / *sectionNumber *rowNumber
    
    
    //高度超出屏幕继续下拉  - 5, 6, 8 方法
    /
    cellForRowAtIndexPath - section - row
    heightForRow - section - row
    willDisplayCell - section - row
    / *sectionNumber *(rowNumber - screenRows)
    

    二、估算方法实现 估算高度为0 设置表头尾失败 不要这么设置

    1.确定单元数
    numberOfSectionsInTableView
    
    numberOfSectionsInTableView
    /
    2.确定每单元的表头尾预估高度
    estimatedHeightForHeaderInSection - section
    estimatedHeightForFooterInSection - section
    3.确定行数
    numberOfRowsInSection - section
    4.确定cell预估高度
    estimatedHeightForRow - section - row * rowNumber
    / *sectionNumber
    
    numberOfSectionsInTableView
    /
    estimatedHeightForHeaderInSection - section
    estimatedHeightForFooterInSection - section
    numberOfRowsInSection - section
    estimatedHeightForRow - section - row * rowNumber
    / *sectionNumber
    
    /
    5.获取cell
    cellForRowAtIndexPath - section - row
    6.返回cell的高度
    heightForRow - section - row
    7.cell将在屏幕显示
    willDisplayCell - section - row
    / *sectionNumber *rowNumber
    
    //高度超出屏幕继续下拉 5, 6, 7
    /
    cellForRowAtIndexPath - section - row
    heightForRow - section - row
    willDisplayCell - section - row
    / *sectionNumber *(rowNumber - screenRows)
    

    三、初始化时使估算高度失效

    viewDidLoad
    {
        self.tableView.estimatedRowHeight = 0;
        self.tableView.estimatedSectionHeaderHeight = 0;
        self.tableView.estimatedSectionFooterHeight = 0;
    }
    1.确定单元数
    numberOfSectionsInTableView
    
    numberOfSectionsInTableView
    /
    2.确定每单元的表头尾高度
    heightForHeader - section
    heightForFooter - section
    3.确定行数
    numberOfRowsInSection - section
    4.确定cell高度
    heightForRow - section - row * rowNumber
    / *sectionNumber
    
    numberOfSectionsInTableView
    /
    heightForHeader - section
    heightForFooter - section
    numberOfRowsInSection - section
    heightForRow - section - row * rowNumber
    / *sectionNumber
    
    /
    5.获取cell
    cellForRowAtIndexPath - section - row
    6.返回cell的高度
    heightForRow - section - row
    7.cell将在屏幕显示
    willDisplayCell - section - row
    / *sectionNumber *rowNumber
    
    /
    8.显示headerView
    viewForHeaderInSection - section
    9.headerView将在屏幕显示
    willDisplayHeaderView - section
    10.显示footerView
    viewForFooterInSection - section
    11.footerView将在屏幕显示
    willDisplayFooterView - section
    / *sectionNumber
    
    //高度超出屏幕继续下拉 5, 6, 7
    /
    cellForRowAtIndexPath - section - row
    heightForRow - section - row
    willDisplayCell - section - row
    / *sectionNumber *(rowNumber - screenRows)
    

    PS:
    1.尽量在初始化tableView时设置高度属性

    self.tableView.rowHeight = ;
    self.tableView.sectionHeaderHeight = ;
    self.tableView.sectionFooterHeight = ;
    
    self.tableView.estimatedRowHeight = ;
    self.tableView.estimatedSectionHeaderHeight = ;
    self.tableView.estimatedSectionFooterHeight = ;
    

    目的:减少方法执行
    在初始化设置,不写相关代理方法,则
    estimatedHeightForHeaderInSection / estimatedHeightForFooterInSection / estimatedHeightForRow
    heightForHeader / heightForFooter / heightForRow 方法不会执行

    2.初始化时设置

    self.tableView.estimatedRowHeight = 0; // set to 0 to disabled
    self.tableView.estimatedSectionHeaderHeight = 0; // set to 0 to disabled
    self.tableView.estimatedSectionFooterHeight = 0; // set to 0 to disabled
    

    则计算高度为heightForHeader / heightForFooter / heightForRow方法,否则计算高度为estimatedHeightForHeaderInSection / estimatedHeightForFooterInSection / estimatedHeightForRow (两种代理方法同时调用的前提下)

    3.如果设置了headerView / footerView,
    estimatedHeightForHeaderInSection / estimatedHeightForFooterInSection(估算高度设为0则只调用1次) // heightForHeader / heightForFooter 方法会连续调用2次

    相关文章

      网友评论

          本文标题:UITableView方法的执行顺序

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