如何实现这样的cell布局

 我来答
uf...m@163.com
2017-10-28 · 超过35用户采纳过TA的回答
知道答主
回答量:87
采纳率:61%
帮助的人:49.5万
展开全部
ios发UI篇—使用纯代码自定义UItableviewcell实现简单微博界面布局
、实现效

二、使用纯代码自定义tableview步骤
1.新建继承自UITableViewCell类
2.重写initWithStyle:reuseIdentifier:
添加所需要显示控件(需要设置控件数据frame, 控件要添加contentView)
进行控件性属性设置(些属性需要设置, 比字体\固定图片)
3.提供2模型
数据模型: 存放文字数据\图片数据
frame模型: 存放数据模型\所控件frame\cell高度
4.cell拥frame模型(要直接拥数据模型)
5.重写frame模型属性setter: 设置控件显示数据frame
6.frame模型数据初始化已经采取懒加载式(每cell应frame模型数据加载)
三、文件结构实现代码
1.文件结构

2.实现代码:
NJWeibo.h文件

1 #import Foundation.h>
2
3 @interface NJWeibo : NSObject
4 @property (nonatomic, copy) NSString *text; // 内容
5 @property (nonatomic, copy) NSString *icon; // 像
6 @property (nonatomic, copy) NSString *name; // 昵称
7 @property (nonatomic, copy) NSString *picture; // 配图
8 @property (nonatomic, assign) BOOL vip;
9
10 - (id)initWithDict:(NSDictionary *)dict;
11 + (id)weiboWithDict:(NSDictionary *)dict;
12 @end

NJWeibo.m文件

1 #import "NJWeibo.h"
2
3 @implementation NJWeibo
4
5 - (id)initWithDict:(NSDictionary *)dict
6 {
7 if (self = [super init]) {
8 [self setValuesForKeysWithDictionary:dict];
9 }
10 return self;
11 }
12
13 + (id)weiboWithDict:(NSDictionary *)dict
14 {
15 return [[self alloc] initWithDict:dict];
16 }
17
18 @end

NJWeiboCell.h文件

1 #import UIKit.h>
2 @class NJWeiboFrame;
3
4 @interface NJWeiboCell : UITableViewCell
5 /**
6 * 接收外界传入模型
7 */
8 //@property (nonatomic, strong) NJWeibo *weibo;
9
10 @property (nonatomic, strong) NJWeiboFrame *weiboFrame;
11
12 + (instancetype)cellWithTableView:(UITableView *)tableView;
13 @end

NJWeiboCell.m文件

1 #import "NJWeiboCell.h"
2 #import "NJWeibo.h"
3 #import "NJWeiboFrame.h"
4
5 #define NJNameFont [UIFont systemFontOfSize:15]
6 #define NJTextFont [UIFont systemFontOfSize:16]
7
8 @interface NJWeiboCell ()
9 /**
10 * 像
11 */
12 @property (nonatomic, weak) UIImageView *iconView;
13 /**
14 * vip
15 */
16 @property (nonatomic, weak) UIImageView *vipView;
17 /**
18 * 配图
19 */
20 @property (nonatomic, weak) UIImageView *pictureView;
21 /**
22 * 昵称
23 */
24 @property (nonatomic, weak) UILabel *nameLabel;
25 /**
26 * 文
27 */
28 @property (nonatomic, weak) UILabel *introLabel;
29 @end
30
31 @implementation NJWeiboCell
32
33 + (instancetype)cellWithTableView:(UITableView *)tableView
34 {
35 // NSLog(@"cellForRowAtIndexPath");
36 static NSString *identifier = @"status";
37 // 1.缓存取
38 NJWeiboCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
39 // 2.创建
40 if (cell == nil) {
41 cell = [[NJWeiboCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
42 }
43 return cell;
44 }
45
46
47 /**
48 * 构造(初始化象候调用)
49 * 般添加需要显示控件
50 */
51 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
52 {
53 self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
54 if (self) {
55 // 让自定义Cell系统cell, 创建拥些控件提供给我使用
56 // 1.创建像
57 UIImageView *iconView = [[UIImageView alloc] init];
58 [self.contentView addSubview:iconView];
59 self.iconView = iconView;
60
61 // 2.创建昵称
62 UILabel *nameLabel = [[UILabel alloc] init];
63 nameLabel.font = NJNameFont;
64 // nameLabel.backgroundColor = [UIColor redColor];
65 [self.contentView addSubview:nameLabel];
66 self.nameLabel = nameLabel;
67
68 // 3.创建vip
69 UIImageView *vipView = [[UIImageView alloc] init];
70 vipView.image = [UIImage imageNamed:@"vip"];
71 [self.contentView addSubview:vipView];
72 self.vipView = vipView;
73
74 // 4.创建文
75 UILabel *introLabel = [[UILabel alloc] init];
76 introLabel.font = NJTextFont;
77 introLabel.numberOfLines = 0;
78 // introLabel.backgroundColor = [UIColor greenColor];
79 [self.contentView addSubview:introLabel];
80 self.introLabel = introLabel;
81
82 // 5.创建配图
83 UIImageView *pictureView = [[UIImageView alloc] init];
84 [self.contentView addSubview:pictureView];
85 self.pictureView = pictureView;
86
87 }
88 return self;
89 }
90
91
92 - (void)setWeiboFrame:(NJWeiboFrame *)weiboFrame
93 {
94 _weiboFrame = weiboFrame;
95
96 // 1.给控件赋值数据
97 [self settingData];
98 // 2.设置frame
99 [self settingFrame];
100 }
101
102
103 /**
104 * 设置控件数据
105 */
106 - (void)settingData
107 {
108 NJWeibo *weibo = self.weiboFrame.weibo;
109
110 // 设置像
111 self.iconView.image = [UIImage imageNamed:weibo.icon];
112 // 设置昵称
113 self.nameLabel.text = weibo.name;
114 // 设置vip
115 if (weibo.vip) {
116 self.vipView.hidden = NO;
117 self.nameLabel.textColor = [UIColor redColor];
118 }else
119 {
120 self.vipView.hidden = YES;
121 self.nameLabel.textColor = [UIColor blackColor];
122 }
123 // 设置内容
124 self.introLabel.text = weibo.text;
125
126 // 设置配图
127 if (weibo.picture) {// 配图
128 self.pictureView.image = [UIImage imageNamed:weibo.picture];
129 self.pictureView.hidden = NO;
130 }else
131 {
132 self.pictureView.hidden = YES;
133 }
134 }
135 /**
136 * 设置控件frame
137 */
138 - (void)settingFrame
139 {
140
141 // 设置像frame
142 self.iconView.frame = self.weiboFrame.iconF;
143
144 // 设置昵称frame
145 self.nameLabel.frame = self.weiboFrame.nameF;
146
147 // 设置vipframe
148 self.vipView.frame = self.weiboFrame.vipF;
149
150 // 设置文frame
151 self.introLabel.frame = self.weiboFrame.introF;
152
153 // 设置配图frame
154
155 if (self.weiboFrame.weibo.picture) {// 配图
156 self.pictureView.frame = self.weiboFrame.pictrueF;
157 }
158 }
159
160 /**
161 * 计算文本宽高
162 *
163 * @param str 需要计算文本
164 * @param font 文本显示字体
165 * @param maxSize 文本显示范围
166 *
167 * @return 文本占用真实宽高
168 */
169 - (CGSize)sizeWithString:(NSString *)str font:(UIFont *)font maxSize:(CGSize)maxSize
170 {
171 NSDictionary *dict = @{NSFontAttributeName : font};
172 // 计算文字范围超指定范围,返指定范围
173 // 计算文字范围于指定范围, 返真实范围
174 CGSize size = [str boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size;
175 return size;
176 }
177
178 @end

NJWeiboFrame.h文件

1 // 专门用保存每行数据frame, 计算frame
2
3 #import Foundation.h>
4 @class NJWeibo;
5 @interface NJWeiboFrame : NSObject
6 /**
7 * 像frame
8 */
9 @property (nonatomic, assign) CGRect iconF;
10 /**
11 * 昵称frame
12 */
13 @property (nonatomic, assign) CGRect nameF;
14 /**
15 * vipframe
16 */
17 @property (nonatomic, assign) CGRect vipF;
18 /**
19 * 文frame
20 */
21 @property (nonatomic, assign) CGRect introF;
22 /**
23 * 配图frame
24 */
25 @property (nonatomic, assign) CGRect pictrueF;
26 /**
27 * 行高
28 */
29 @property (nonatomic, assign) CGFloat cellHeight;
30
31 /**
32 * 模型数据
33 */
34 @property (nonatomic, strong) NJWeibo *weibo;
35 @end
un...b@163.com
2017-10-28 · 超过31用户采纳过TA的回答
知道答主
回答量:83
采纳率:100%
帮助的人:31.3万
展开全部
使用div布局,设置div的display分别为table,table-row,table-cell,来使用CSS实现原先的table布局,现在想设置第一行为1列,第二行为两列,就会出现第一个的那一列和第二行的第一列对其,而不是占据整行。现在要求占据整行,如何实现?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式