UITableView和UICollecionView自适应
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 @"删除";
}
- (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];
}
}`</code></pre>
设置插入模式:
<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>`
-
(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;
}</code></pre> 自定义BookCollectionViewCell: <pre><code>
@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`</code></pre>
iOS8之后的UITableView和UICollectionView自适应都比较简单设置高度即可,有疑问欢迎讨论~