欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解iOS tableViewCell自适应高度 第三发类库

程序员文章站 2023-11-28 22:04:40
在github中有许多大牛封装好的第三发类库,其中有个自适应cell高度的类库 下载地址:https://github.com/gsdios/sdautolayout...

在github中有许多大牛封装好的第三发类库,其中有个自适应cell高度的类库

详解iOS tableViewCell自适应高度 第三发类库

下载地址:https://github.com/gsdios/sdautolayout

model类

commentsmodel
#import "jsonmodel.h"
#import "getcommentdata.h"
@interface commentsmodel : jsonmodel
@property(nonatomic,copy)nsarray<getcommentdata> *commentlist;
@end 
#import "commentsmodel.h"
@implementation commentsmodel
@end 
getcommentdata
#import "jsonmodel.h"
@protocol getcommentdata
@end
@interface getcommentdata : jsonmodel
@property(nonatomic,copy)nsstring *message;
@property(nonatomic,copy)nsstring *nickname;
@property(nonatomic,copy)nsstring *createtimestr;
@end 
#import "getcommentdata.h"
@implementation getcommentdata
@end 

控制器

#import "commentstableviewcontroller.h"
#import "commentsmodel.h"
#import "commentcell.h"
@interface commentstableviewcontroller ()
@property(nonatomic,strong)nsarray *commentsarray;
@end
@implementation commentstableviewcontroller
-(nsarray *)commentsarray{
if (_commentsarray==nil) {
nsdata *data=[nsdata datawithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"comment_list.json" oftype:nil]];
commentsmodel *commensm=[[commentsmodel alloc]initwithdata:data error:nil];
_commentsarray=commensm.commentlist;
}
return _commentsarray;
}
- (void)viewdidload {
[super viewdidload];
}
- (void)didreceivememorywarning {
[super didreceivememorywarning];
// dispose of any resources that can be recreated.
}
#pragma mark - table view data source
- (nsinteger)numberofsectionsintableview:(uitableview *)tableview {
return 1;
}
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section {
return self.commentsarray.count;
}
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath {
static nsstring *id=@"comment";
commentcell *cell=[tableview dequeuereusablecellwithidentifier:id];
if (cell==nil) {
cell=[[commentcell alloc]initwithstyle:uitableviewcellstyledefault reuseidentifier:id];
}
cell.commentdata=self.commentsarray[indexpath.row];
return cell;
}
-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath{
return [self cellheightforindexpath:indexpath cellcontentviewwidth:[self cellcontentviewwith]];
}
-(cgfloat)cellcontentviewwith{
cgfloat width=[uiscreen mainscreen].bounds.size.width;
if ([uiapplication sharedapplication].statusbarorientation != uiinterfaceorientationportrait && [[uidevice currentdevice].systemversion floatvalue] < 8) {
width = [uiscreen mainscreen].bounds.size.height;
}
return width;
}
@end 

具体自定义cell的代码

#import <uikit/uikit.h>
@class getcommentdata;
@interface commentcell : uitableviewcell
@property(nonatomic,strong)getcommentdata *commentdata;
@property(nonatomic,strong)uilabel *namelabel;
@property(nonatomic,strong)uilabel *titlelabel;
@property(nonatomic,strong)uilabel *datelabel;
@end 
#import "commentcell.h"
#import "commentsmodel.h"
@implementation commentcell
-(void)setcommentdata:(getcommentdata *)commentdata{
_commentdata=commentdata;
_titlelabel.text=commentdata.message;
_datelabel.text=commentdata.createtimestr;
_namelabel.text=commentdata.nickname;
}
- (instancetype)initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier
{
self = [super initwithstyle:style reuseidentifier:reuseidentifier];
if (self) {
[self setup];
}
return self;
}
-(void)setup{
_namelabel=[uilabel new];
[self.contentview addsubview:_namelabel];
_namelabel.textcolor=[uicolor colorwithred:0.891 green:0.549 blue:0.073 alpha:1.000];
_namelabel.font=[uifont systemfontofsize:15];
_namelabel.numberoflines=1;
_titlelabel=[uilabel new];
[self.contentview addsubview:_titlelabel];
_titlelabel.textcolor=[uicolor darkgraycolor];
_titlelabel.font=[uifont systemfontofsize:15];
_titlelabel.numberoflines=0;
_datelabel=[uilabel new];
[self.contentview addsubview:_datelabel];
_datelabel.textcolor=[uicolor colorwithred:0.679 green:0.166 blue:0.828 alpha:1.000];
_datelabel.font=[uifont systemfontofsize:15];
_datelabel.numberoflines=1;
cgfloat margin=10;
uiview *contentview=self.contentview;
_namelabel.sd_layout
.leftspacetoview(contentview,margin)
.topspacetoview(contentview,margin)
.rightspacetoview(contentview,margin)
.heightis(20);
_titlelabel.sd_layout
.leftspacetoview(contentview,margin)
.topspacetoview(_namelabel,2)
.rightspacetoview(contentview,margin)
.autoheightratio(0);
_datelabel.sd_layout
.leftspacetoview(contentview,margin)
.topspacetoview(_titlelabel,5)
.heightis(20)
.widthis(150);
[self setupautoheightwithbottomviewsarray:@[_titlelabel,_datelabel,_namelabel] bottommargin:margin];
}
- (void)awakefromnib {
}
- (void)setselected:(bool)selected animated:(bool)animated {
[super setselected:selected animated:animated];
}
@end