美文网首页iOS
TableView深入研究

TableView深入研究

作者: 提莫不胖 | 来源:发表于2016-07-22 19:20 被阅读699次

    OC 日常笔记碎片知识

    1.分析TableView的重要性.
    -TableView是如何计算contentSize?
    -什么控件会纳入contenSize?

    *代码演示

    #import "ViewController.h"
    
    @interface ViewController () <UITableViewDataSource, UITableViewDelegate>
    @property (nonatomic, weak) UITableView *tableView;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        //创建tableView
        UITableView *tableView = [[UITableView alloc] init];
        //设置尺寸
        tableView.frame = CGRectMake(50, 100, 200, 300);
        //背景颜色
        tableView.backgroundColor = [UIColor grayColor];
        //数源方法
        tableView.dataSource = self;
        //代理方法
        tableView.delegate = self;
        //每行高度
        tableView.rowHeight = 40;
        //赋值view
        [self.view addSubview:tableView];
        self.tableView = tableView;
    }
    
    //点击屏幕打印tableView的contentSize
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        NSLog(@"contentSize.height = %f", self.tableView.contentSize.height);
    }
    
    #pragma mark - <UITableViewDelegate>
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSLog(@"contentOffset.y = %f", tableView.contentOffset.y);
        NSLog(@"contentSize.height = %f", tableView.contentSize.height);
    }
    
    #pragma mark - 数据源
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return 20;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *ID = @"cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
            cell.backgroundColor = [UIColor redColor];
        }
        cell.textLabel.text = [NSString stringWithFormat:@"%@-%zd", self.class, indexPath.row];
        return cell;
    }
    
    根据数据多少计算contentSize.gif 注意TableView打印.gif

    *添加TableHeaderView与TableFooterView

     //tableHeaderView
        UIView *header = [[UIView alloc] init];
        header.frame = CGRectMake(0, 0, tableView.frame.size.width, 64);
        header.backgroundColor = [UIColor yellowColor];
        tableView.tableHeaderView = header;
        //tableFooterView
        UIView *footer = [[UIView alloc] init];
        footer.frame = CGRectMake(0, 0, tableView.frame.size.width, 49);
        footer.backgroundColor = [UIColor blueColor];
        tableView.tableFooterView = footer;
    
    增加头部与尾部View.gif

    *那么思考普通的控件会纳入contentSize计算范围吗?

        // 额外添加的子控件
        UIView *textHeader = [[UIView alloc] init];
        textHeader.frame = CGRectMake(0, -40, tableView.frame.size.width, 40);
        textHeader.backgroundColor = [UIColor purpleColor];
        [tableView addSubview:textHeader];
    
    并没有纳入计算范围.gif

    *要如何显示额外添加的控件?

    // 内边距
        tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0);
    
    增加额外滚动区域.gif

    *添加额外的滚动区域并没有改变contentSize,唯一改变是可视范围.

    01.png 02.png 03.png 04.png 05.png 06.png 07.png 08.png 09.png 10.png

    总结:

    • 1-什么是tableView的内容(content)?

    1.Cell
    2.tableHeaderView\tableFooterView
    3.sectionHeader\sectionFooter

    • 2-contentSize.height :

    意思是内容的高度.

    • 3-contentOffset.y :

    内容的偏移量(frame的顶部 - content的顶部)

    • 4-contentInset :

    内容周围的间距(内边距)

    • 5-Frame:

    1.frame.size.height : 矩形框的高度
    2.frame : 以父控件内容的左上角为坐标原点

    相关文章

      网友评论

        本文标题:TableView深入研究

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