iOS猿媛圈iOS开发技术讨论iOS开发实用技术

UITableView和UICollecionView自适应

2016-05-08  本文已影响2521人  FlyElephant

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

UITableView自适应

简单看一下效果:


UITableViewCell.png

UITableView通用设置:
<pre><code>`
-(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;
}</code></pre> 初始化数据: <pre><code>
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];
}

</code></pre> UITableViewCell设置预估高度: <pre><code>
self.tableView.estimatedRowHeight=120.0f;
self.tableView.rowHeight=UITableViewAutomaticDimension;</code></pre> 顺便可以设置一下删除模式: <pre><code>
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"删除";
}

设置插入模式:

Snip20160508_3.png
<pre><code>-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleInsert; }</code></pre>

UICollectionView自适应

自适应效果图:


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初始化:
<pre><code>`

-(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`</code></pre>
iOS8之后的UITableView和UICollectionView自适应都比较简单设置高度即可,有疑问欢迎讨论~

上一篇下一篇

猜你喜欢

热点阅读