UITableView和UICollecionView自适应

UITableView中在iOS8之前经常会遇到需要计算UITableViewCell单元格的高度,UICollectionViewCell同样会遇到这样的情况,不过在iOS8之后宽高计算就非常简单了,只需要简单设置一下即可.

UITableView自适应

简单看一下效果:


UITableView和UICollecionView自适应_第1张图片
UITableViewCell.png

UITableView通用设置:

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.data count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    BookTableViewCell *cell=[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    [cell setupModel:self.data[indexPath.row]];
    return cell;
}

初始化数据:

    self.tableView.estimatedRowHeight=120.0f;
    self.tableView.rowHeight=UITableViewAutomaticDimension;
    self.data=[NSMutableArray array];
    [self.tableView registerClass:[BookTableViewCell class] forCellReuseIdentifier:CellIdentifier];

    for (NSInteger i=0; i<30; i++) {
        BookModel *model=[BookModel new];
        model.imgName=@"Book";
        model.bookName=@"UITableViewCell";
        NSInteger mode=i%3;
        if (mode==0) {
            model.bookDescription=@"魏则西,男,二十一岁,生前就读于西安电子科技大学,计算机专业学生,因身患滑膜肉瘤去世。魏则西曾经的梦想是每天玩命学习,每天取得巨大的进步,大四之后去美国好好学学计算机,那会是他人生最大的幸福。";
        }else if (mode==1){
            model.bookDescription=@"滑膜肉瘤是一种恶性肿瘤,目前尚无有效治疗手段。魏则西是家中独子,父母倾尽全力为他治病。辗转北京、上海、天津、广州各大肿瘤医院,得到的都是坏消息。魏则西在百度搜索疾病信息,第一条结果是某武警医院(武警北京总队第二医院)的所谓「生物免疫疗法」。魏则西一家人在北京见到了这家武警医院的李姓主任,李主任言:这个技术不是他们的,是斯坦福研发出来的,他们是合作,有效率达到百分之八九十。看着魏则西的各种报告单,李主任对魏则西父母说:保二十年没问题。正所谓典型的套路:「病很重,能治好,得花钱」。";
        }else if(mode==2){
            model.bookDescription=@"魏则西一家人求医心切,但也会有所顾虑,这不会是骗人的吧?不过一看这的确是一家三甲医院,魏则西还专门查了一下这个医生,这个李主任还上过中央电视台,不止一次,中央电视台十套节目。会是假的吗?你看,百度、三甲医院、中央台,还是斯坦福的技术,这些应该没有问题了吧。";
        }
        [self.data addObject:model];
    }

UITableViewCell设置预估高度:

self.tableView.estimatedRowHeight=120.0f;
self.tableView.rowHeight=UITableViewAutomaticDimension;

顺便可以设置一下删除模式:

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"删除";
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.data removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }else if (editingStyle==UITableViewCellEditingStyleInsert){
        NSInteger insertRow=indexPath.row+1;
        BookModel *model=[BookModel new];
        model.imgName=@"Book";
        model.bookName=@"UITableViewCell";
        model.bookDescription=[NSString stringWithFormat:@"插入成功:%ld",insertRow];
        [self.data insertObject:model atIndex:insertRow];
        [tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:insertRow inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

设置插入模式:


UITableView和UICollecionView自适应_第2张图片
Snip20160508_3.png
 -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleInsert;
}

UICollectionView自适应

自适应效果图:


UITableView和UICollecionView自适应_第3张图片
FlyElephant.png

UICollectionView数据初始化:

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.estimatedItemSize = CGSizeMake(100, 100);
    [self.collectionView registerClass:[BookCollectionViewCell class] forCellWithReuseIdentifier:CollectionViewIdentifier];
    self.collectionView.backgroundColor      = [UIColor redColor];
    self.collectionView.collectionViewLayout = layout;
    self.data                                = [NSMutableArray array];
    
    [self.data addObject:@"北京"];
    [self.data addObject:@"FlyElephant"];
    [self.data addObject:@"编程"];
    [self.data addObject:@"加班"];
    [self.data addObject:@"Objective-C"];
    [self.data addObject:@"iOS"];
    [self.data addObject:@"UICollectioView自适应"];
}

UICollectionView初始化:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return [self.data count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    BookCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CollectionViewIdentifier forIndexPath:indexPath];
    cell.contentLabel.text = self.data[indexPath.row];
    return cell;
}

自定义BookCollectionViewCell:

@implementation BookCollectionViewCell

-(instancetype)initWithFrame:(CGRect)frame{
    self=[super initWithFrame:frame];
    if (self) {
        self=[[[NSBundle mainBundle] loadNibNamed:@"BookCollectionCell" owner:self options:nil] firstObject];
        self.backgroundColor=[UIColor darkGrayColor];
        self.clipsToBounds=YES;
    }
    return self;
}

-(void)layoutSubviews{
    [super layoutSubviews];
    self.clipsToBounds=YES;
    self.layer.cornerRadius=self.frame.size.width/8;
}

@end

iOS8之后的UITableView和UICollectionView自适应都比较简单设置高度即可,有疑问欢迎讨论~

你可能感兴趣的:(UITableView和UICollecionView自适应)