纯代码 mark

#pragma mark - 代理方法

// 得出方案:在这个方法返回之前就要计算cell的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

LZJStatus *status = self.statuses[indexPath.row];

CGFloat space = 10;

/** 图像 */

CGFloat iconX = space;

CGFloat iconY = space;

CGFloat iconWH = 30;

CGRect iconImageViewFrame = CGRectMake(iconX, iconY, iconWH, iconWH);

/** 正文 */

CGFloat textX = iconX;

CGFloat textY = CGRectGetMaxY(iconImageViewFrame) + space;

CGFloat textW = [UIScreen mainScreen].bounds.size.width - 2 * space;

NSDictionary *textAtt = @{NSFontAttributeName : [UIFont systemFontOfSize:14]};

// 最大宽度是textW,高度不限制

CGSize textSize = CGSizeMake(textW, MAXFLOAT);

CGFloat textH = [status.text boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAtt context:nil].size.height;

CGRect text_LabelFrame = CGRectMake(textX, textY, textW, textH);

CGFloat cellHeight = 0;

/** 配图 */

if (status.picture) { // 有配图

CGFloat pictureWH = 100;

CGFloat pictureX = iconX;

CGFloat pictureY = CGRectGetMaxY(text_LabelFrame) + space;

CGRect pictureImageViewFrame = CGRectMake(pictureX, pictureY, pictureWH, pictureWH);

cellHeight = CGRectGetMaxY(pictureImageViewFrame) + space;

} else {

cellHeight = CGRectGetMaxY(text_LabelFrame) + space;

}

return cellHeight;

}

@end

----------------------------------------------------------------------

#define LZJTextFont [UIFont systemFontOfSize:14]

#define LZJNameFont [UIFont systemFontOfSize:14]

@interface LZJStatusCell ()

/** 图像 */

@property (nonatomic, weak) UIImageView *iconImageView;

/** 昵称 */

@property (nonatomic, weak) UILabel *nameLabel;

/** vip */

@property (nonatomic, weak) UIImageView *vipImageView;

/** 正文 */

@property (nonatomic, weak) UILabel *text_Label;

/** 配图 */

@property (nonatomic, weak) UIImageView *pictureImageView;

@end

@implementation XMGStatusCell

// 添加子控件的原则:把所有有可能显示的子控件都先添加进去

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

/** 图像 */

UIImageView *iconImageView = [[UIImageView alloc] init];

[self.contentView addSubview:iconImageView];

self.iconImageView = iconImageView;

/** 配图 */

UIImageView *pictureImageView = [[UIImageView alloc] init];

[self.contentView addSubview:pictureImageView];

self.pictureImageView = pictureImageView;

/** vip */

UIImageView *vipImageView = [[UIImageView alloc] init];

vipImageView.contentMode = UIViewContentModeCenter;

vipImageView.image = [UIImage imageNamed:@"vip"];

[self.contentView addSubview:vipImageView];

self.vipImageView = vipImageView;

/** 昵称 */

UILabel *nameLabel = [[UILabel alloc] init];

nameLabel.font = LZJNameFont;

[self.contentView addSubview:nameLabel];

self.nameLabel = nameLabel;

/** 正文 */

UILabel *text_Label = [[UILabel alloc] init];

text_Label.font = LZJTextFont;

text_Label.numberOfLines = 0;

[self.contentView addSubview:text_Label];

self.text_Label = text_Label;

}

return self;

}

- (void)layoutSubviews

{

[super layoutSubviews];

CGFloat space = 10;

/** 图像 */

CGFloat iconX = space;

CGFloat iconY = space;

CGFloat iconWH = 30;

self.iconImageView.frame = CGRectMake(iconX, iconY, iconWH, iconWH);

/** 昵称 */

CGFloat nameX = CGRectGetMaxX(self.iconImageView.frame) + space;

CGFloat nameY = iconY;

NSDictionary *nameAtt = @{NSFontAttributeName : LZJNameFont};

// 计算昵称文字的尺寸

CGSize nameSize = [self.status.name sizeWithAttributes:nameAtt];

CGFloat nameW = nameSize.width;

CGFloat nameH = nameSize.height;

self.nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);

/** vip */

if (self.status.isVip) {

CGFloat vipX = CGRectGetMaxX(self.nameLabel.frame) + space;

CGFloat vipW = 14;

CGFloat vipH = nameH;

CGFloat vipY = nameY;

self.vipImageView.frame = CGRectMake(vipX, vipY, vipW, vipH);

}

/** 正文 */

CGFloat textX = iconX;

CGFloat textY = CGRectGetMaxY(self.iconImageView.frame) + space;

CGFloat textW = self.contentView.frame.size.width - 2 * space;

NSDictionary *textAtt = @{NSFontAttributeName : LZJTextFont};

// 最大宽度是textW,高度不限制

CGSize textSize = CGSizeMake(textW, MAXFLOAT);

CGFloat textH = [self.status.text boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAtt context:nil].size.height;

self.text_Label.frame = CGRectMake(textX, textY, textW, textH);

/** 配图 */

if (self.status.picture) { // 有配图

CGFloat pictureWH = 100;

CGFloat pictureX = iconX;

CGFloat pictureY = CGRectGetMaxY(self.text_Label.frame) + space;

self.pictureImageView.frame = CGRectMake(pictureX, pictureY, pictureWH, pictureWH);

}

}

- (void)setStatus:(LZJStatus *)status

{

_status = status;

self.iconImageView.image = [UIImage imageNamed:status.icon];

self.nameLabel.text = status.name;

if (status.isVip) {

self.nameLabel.textColor = [UIColor orangeColor];

self.vipImageView.hidden = NO;

} 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;

}

}

@end

时间: 2024-08-04 09:06:51

纯代码 mark的相关文章

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中

iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程(一)

iOS开发UI篇-以微博界面为例使用纯代码自定义cell程序编码全过程(一) 一.storyboard的处理 直接让控制器继承uitableview controller,然后在storyboard中把继承自uiviewcontroller的控制器干掉,重新拖一个tableview controller,和主控制器进行连线. 项目结构和plist文件 二.程序逻辑业务的处理 第一步,把配图和plist中拿到项目中,加载plist数据(非png的图片放到spooding files中) 第二步,字

IOS开发UI篇--UITableView的自定义布局==纯代码布局

UITableView中除了利用系统的UItableViewCell不能完成需求进行布局时,还可以进行自定义布局: 自定义布局分为两类:(1)利用代码进行创建 (2)利用xib进行实现: 下面对利用代码进行创建分析: 应用场景:像微博,等列表数据展示(由于微博的每个单元格的数据大小不一致,所以得计算每个单元格的大小) 分析:前提是获取列表数据,然后建立每个单元格的模型(建立单元格模型应继承UITableViewCell)复写 - (id)initWithStyle:(UITableViewCel

纯代码transform位移伸缩和旋转

1 // 2 // LWTViewController.m 3 // 纯代码位移和伸缩作业 4 // 5 // Created by apple on 14-5-20. 6 // Copyright (c) 2014年 lwt. All rights reserved. 7 // 8 9 #import "LWTViewController.h" 10 #pragma mark 定义常量 11 /** 图片距离顶部的高度 */ 12 #define KImageY 60 13 /**

纯代码frame位移和伸缩

1 // 2 // LWTViewController.m 3 // 纯代码位移和伸缩作业 4 // 5 // Created by apple on 14-5-20. 6 // Copyright (c) 2014年 lwt. All rights reserved. 7 // 8 9 #import "LWTViewController.h" 10 #pragma mark 定义常量 11 /** 图片距离顶部的高度 */ 12 #define KImageY 60 13 /**

(源码推荐)快速开发10几天时间纯代码高仿《内涵段子》

这个项目是用OC编写,如果有的朋友已经下载下来看了这个项目, 就会意识到这个项目没有一个storyboard或者是nib,不是因为不喜欢用storyboard或者nib,而是因为一直以来就想用纯代码写个项目,(好远大的梦想..开玩笑的..),但是项目是写出来的,光想不做不写是不行的,所以我就开始我的”内涵之旅“了. Github 地址 https://github.com/Charlesyaoxin/NeiHanDuanZI 日志: 8.30号:没怎么做东西,就是搭建了项目的架构,拉入了之前经常

iOS开发UI基础—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

ios开发UI基础-使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片) 3.提供2个模型 数据模型:

iPad纯代码实现横竖屏切换,采用相对布局

因为本来不喜欢使用StoryBoard.xib等可视化编程,一直使用的纯代码布局,但是纯代码布局的iOS开发者会遇到一个问题,就是横竖屏适配的问题,如果使用自动布局,那些约束的,写起来都是不难,但是控件之间的关联太多,以至于维护性很差.本人由于工作的原因,做iPad开发,那就必须要解决横竖屏适配的问题,于是就有了这篇文章. 代码如下: // //  ViewController.swift //  iPad横竖屏切换 // //  Created by zhangxu on 16/7/30. /

纯代码实现横向滚动的UIScrollView

// 纯代码实现横向滚动的UIScrollView //  NeedListViewController.m // // //  Copyright © 2016年  All rights reserved. // #import "CFNeedListViewController.h" #import "CFWaitingViewController.h" #import "CFRespondedViewController.h" #impor