[自定义不等高的cell]-xib方式iOS8之前

时间:2019-10-01 16:45来源:快三平台下载编程
// ViewController.h#import UIKit/UIKit.h@interface ViewController : UITableViewController@end// ViewController.m#import "ViewController.h"#import "XMGStatusCell.h"#import "XMGStatus.h"#import "MJExtension.h"@interface ViewController ()/** 所
// ViewController.h#import <UIKit/UIKit.h>@interface ViewController : UITableViewController@end// ViewController.m#import "ViewController.h"#import "XMGStatusCell.h"#import "XMGStatus.h"#import "MJExtension.h"@interface ViewController ()/** 所有的微博模型*/@property (nonatomic ,strong) NSArray *statuses;@end@implementation ViewController- (NSArray *)statuses{ if (!_statuses) { _statuses = [XMGStatus mj_objectArrayWithFilename:@"statuses.plist"]; } return _statuses;}NSString *ID = @"status";- viewDidLoad { [super viewDidLoad]; // 注册 [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([XMGStatusCell class]) bundle:nil] forCellReuseIdentifier:ID]; // 大概行高 self.tableView.estimatedRowHeight = 200;}#pragma mark - 数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.statuses.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ XMGStatusCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 传递模型数据 cell.status = self.statuses[indexPath.row]; return cell;}// 方案:在这个方法返回之前就要确定好cell的高度XMGStatusCell *cell;- tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ if (cell == nil) { cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 如果没有找到,那么就去storyboard里面找 } cell.status = self.statuses[indexPath.row]; return cell.cellHeight;}@end// 模型数据#import <UIKit/UIKit.h>// XMGStatus.h#define XMGTextFont [UIFont systemFontOfSize:14]#define XMGNameFont [UIFont systemFontOfSize:17]@interface XMGStatus : NSObject/** 图像*/@property (nonatomic ,copy) NSString *icon;/** 昵称*/@property (nonatomic ,copy) NSString *name;/** 内容*/@property (nonatomic ,copy) NSString *text;/** vip*/@property (nonatomic ,assign ,getter=isVip) BOOL vip;/** 配图*/@property (nonatomic ,copy) NSString *picture;@end// XMGStatus.m#import "XMGStatus.h"@implementation XMGStatus@end// XMGStatusCell.h#import <UIKit/UIKit.h>@class XMGStatus;@interface XMGStatusCell : UITableViewCell/** 微博模型*/@property (nonatomic ,strong) XMGStatus *status;/** cell的高度*/- cellHeight;@end// XMGStatusCell.m#import "XMGStatusCell.h"#import "XMGStatus.h"@interface XMGStatusCell ()/** 图像*/@property (nonatomic ,weak) IBOutlet UIImageView *iconImageView;/** 昵称*/@property (nonatomic ,weak) IBOutlet UILabel *nameLabel;/** vip*/@property (nonatomic ,weak) IBOutlet UIImageView *vipImageView;/** 正文*/@property (nonatomic ,weak) IBOutlet UILabel *text_Label;/** 配图*/@property (nonatomic ,weak)IBOutlet UIImageView *pictureImageView;@end@implementation XMGStatusCell- awakeFromNib{ // 手动设置label的文字的最大宽度(目的:为了能够计算label的高度,得到最真实的尺寸) self.text_Label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;}// 设置数据- setStatus:(XMGStatus *)status{ _status = status; self.iconImageView.image = [UIImage imageNamed:status.icon]; self.nameLabel.text = status.name; if (status.isVip) { // 是VIP self.vipImageView.hidden = NO; self.nameLabel.textColor = [UIColor orangeColor]; } else { self.vipImageView.hidden = YES; self.nameLabel.textColor = [UIColor blackColor]; } self.text_Label.text = status.text; if (status.picture) { // 有配图 self.pictureImageView.hidden = NO; self.pictureImageView.image = [UIImage imageNamed:status.picture]; } else { self.pictureImageView.hidden = YES; }}- cellHeight{ // 强制布局(目的:让label根据设置的约束计算自己最真实尺寸) [self layoutIfNeeded]; CGFloat cellHeight = 0; if (self.status.picture) { // 有配图 cellHeight = CGRectGetMaxY(self.pictureImageView.frame) + 10; } else { cellHeight = CGRectGetMaxY(self.text_Label.frame) + 10; } return cellHeight;}@end

图片 1

编辑:快三平台下载编程 本文来源:[自定义不等高的cell]-xib方式iOS8之前

关键词:

  • 上一篇:没有了
  • 下一篇:没有了