就是算每一次倒入水的高度

时间:2019-10-01 16:46来源:快三平台下载编程
// 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-sizing// // 告诉tableView所有cell的高度是自动计算的(根据设置的约束来计算)// self.tableView.rowHeight = UITableViewAutomaticDimension;//// // 告诉tableView所有cell的估算高度(减少tableView:heightForRowAtIndexPath:..的调用次数) self.tableView.estimatedRowHeight = 200;// 不把底部@property (weak, nonatomic) IBOutlet NSLayoutConstraint *pictureBottomLc;约束除掉,到时候传数据,根据约束计算的子控件的frame不对}#pragma mark - 数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.statuses.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{// NSLog(@"cellForRowAtIndexPath--%zd",indexPath.row); XMGStatusCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 传递模型数据 cell.status = self.statuses[indexPath.row]; return cell;}XMGStatusCell *cell;- tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{// NSLog(@"heightForRowAtIndexPath--%zd",indexPath.row); // 创建一个临时的cell(目的:为了传递indexPath这一行对应的数据,布局内部所有的子控件,得到子控件的frame,进而能够计算cell的高度) if (cell == nil) { cell = [tableView dequeueReusableCellWithIdentifier:ID]; } // 传递模型数据 cell.status = self.statuses[indexPath.row]; return cell.cellHeight;}@end// 模型数据// XMGStatus.h#import <UIKit/UIKit.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
  • 笔者认真想了一天,怎么透彻的理解全局这个cell的作用,
  • 最终笔者想到一个恰当的例子,就比如说,把cell比作一个水杯,容器
  • 里面的数据status就是水,算每一个cell的高度,就是算每一次倒入水的高度

图片 1图片 2

编辑:快三平台下载编程 本文来源:就是算每一次倒入水的高度

关键词: