码迷,mamicode.com
首页 > 其他好文 > 详细

tableview 使用visual format language自适应cell宽高,和横竖屏

时间:2015-05-15 17:50:14      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:ios   uitableviewcell   uitableview   

再也不用担心,如何做适配了。
使用苹果官方提供的适配方案当然是最正宗的,比第三房框架可控。
可以适配各种屏幕尺寸,以及横竖屏,欢迎有独特简介的极客们,提出宝贵意见


开发过程中,时常会遇到cell自适应高度与横屏下的宽度,传统的做法要么是手动计算frame,要么就是使用xib。
第一种方式,工作量是巨大的(相信很多人深有体会)。
第二种方式,对于协同开发和有些不用xib公司来说,有些可望不可及。
第三种方式,手写constraints。手写过的猿猿们一定体会到会有多少行代码。
其实还有一种看起来不是很友好的方式,那就是使用苹果官方提供的vsl。官方文档地址https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html#//apple_ref/doc/uid/TP40010853-CH3-SW1


网上对于这种方式的demo少之又少,官方提供的解释更是简洁不明了。于是花了半天时间研究一番,并写一个demo,便于共同学习。有不同看法的猿猿们,欢迎提出。


下面进入正题:
管理tableview的controller里,只用这样写
_tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
    _tableView.translatesAutoresizingMaskIntoConstraints = NO;
    _tableView.estimatedRowHeight = 44;
    
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
    
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_tableView]-0-|" options:0 metrics:0 views:@{@"_tableView":_tableView}]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_tableView]-|" options:0 metrics:0 views:@{@"_tableView":_tableView}]];
    
    
    tableview的datasource 和delegate只需要实现两个方法,
    #pragma mark - tableview delegate datasource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _rows.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"cell";
    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[CustomTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    cell.model = self.rows[indexPath.row];
    return cell;
}


是不是少了很多代码。


那么核心的cell里应该怎么写呢?
只需这样//add constraints
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[_leftImageView(==width)]" options:0 metrics:@{@"width":@imageView_size} views:@{@"_leftImageView":_leftImageView}]];
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[_leftImageView(==height)]" options:0 metrics:@{@"height":@imageView_size} views:@{@"_leftImageView":_leftImageView}]];


爽不爽,不用写很多frame了吧,这就是全部的布局,对,就是这么简单!

demo完整地址:https://github.com/mianhuaijiaju/TestVisual_format_language/tree/master

tableview 使用visual format language自适应cell宽高,和横竖屏

标签:ios   uitableviewcell   uitableview   

原文地址:http://blog.csdn.net/mianhuaijiaju/article/details/45746109

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!