如何调整cell的大小
一般情况下,我们使用tableview的时候从来没有设置过cell的大小(w,h)、位置(x,y)等,而是系统直接给我们自动生成,但是有的时候我们可能会改动cell的大小及位置,比如:在适配ios6跟ios8的时候,需要把外观做的一样,但是ios6中cell中的contextview默认情况下是不占满整个cell的,而是左右同时空出10个间距,所以这个时候我们需要在哪里进行操作呢。这个时候我们就用到了-(void)setFrame:(CGRect )frame;这个方法。
在此方法中截获frame,这个tabelview传递过来的frame,我们在其基础上进行一些操作来改变cell的位置和大小,然后再将我们生成的这个frame传给父类方法,让他进行具体的操作。
-(void)setFrame:(CGRect)frame
{
// 首先我们需要判断是不是ios6之前的版本(含ios6)
if([[UIDevice currentDevice].systemVersion doubleValue]>=7.0) return;
frame.size.width +=20; // 因为左右都需要加10,所以我们将frame的宽度加20;
frame.origin.x =-10; // 因为默认x 为0 当我们给他的宽度增加20之后,系统将cell右边拉伸,这个时候我们需要进行平移,而平移的大小刚好是10;
[super setFrame:frame]; // 将这里获得的frame传给父类,让他进行具体操作。
}
另外需要注意的是,ios6中没有分割线,所以我们需要设置cell的分割线,系统的cell的分割线是由一个UIView控件生成的,所以我们模仿其操作,这个view我们需要在cell初始化的时候给其添加一个view ,这是因为每一次cell的初始化都要生成一个分割线(每组的最后一个例外),所以我们需要在 -(id)initWithStayle:
@property (nonatomic,weak)UIView * fenGeLine;
(UITableViewCellStayle*)style resuseIdentifier:(NSString *)resuseIdentifier
{
if(self = [super initWithStayle:style resuseIdentifier:resuseIdentifier])
{
UIView *fenGeLine =[[UIView alloc]init];
fenGeLine.backgroundColor = [UIColor blackColor];
fenGeLine.alpha = 0.2;
[self.contentView addSubview:fenGeLine];
self.fenGeLine = fenGeLine;// 由于需要设置fenGeLine的frame,所以需要将fenGeLine变成成员变量。
}
}
// 子控件的frame 一般都在layoutSubviews中进行设置。
-(void)layoutSubviews
{
[self layoutSubviews];
CGFloat h = 1;
CGFloat w = [UIScreen mainScreen].bounds.size.width;
CGFloat x = 0;
CGFloat y = self.contentView.frame.size.height - h;
self.fenGeLine.frame = CGRectMake(x,y,w,h);
}
此时每组的最后一个是不需要设置分割线的,但是以上代码是每一行都有分割线的,所以我们需要判断当前行是不是最后一行,那么我们如何知道当前是不是最后一行呢,我们得通过
-(UITableViewCell *)tableView:(UITableVIew *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//这个cell是我自定义好的
ZPTableViewCell *cell = [ZPTableViewCell cellWithTableView:tableView];
ZPSettingGroup *group = self.data[indexPath.section];
// cell.item = group.items[indexPath.row];
cell.lastRowInSection = group.items.count == indexPath.row +1; // 这里判断依据就是group的总条目数 == 当强行+1就说明时最后一组了。YES or NO;
}
在自定义cell中重写lastRowInSection的set方法
-(void)setLastRowInSection:(BOOL)lastRowInSection
{
_lastRowInSection = lastRowInSection;
self.fenGeLine.hidden = lastRowInSection;
}
如何调整cell的大小的更多相关文章
- 矢量图绘制工具Svg-edit调整画布的大小
矢量图绘制工具Svg-edit调整画布的大小 ------------------------------ ------------------------
- C#-禁止调整窗体的大小
要是想禁止调整窗体的大小,可以查看:FormBorderStyle属性,该属性的设置中有一个"FixedSingle"的选择项,它可以禁止调整窗体的大小.
- VMware虚拟机中调整Linux分区大小手记(转发)
前段时间用VMware5.5安装了CentOS5.3,安装的时候分配了5Gb的虚拟硬盘空间给Linux系统,系统安装选择很多组件和软件,后面使用时又安装也一些软件,结果导致虚拟硬盘空间不足.查看分 ...
- LibRTMP优化之调整输出块大小
1. 为什么要调整输出块大小 首先在RTMP_Connect0函数中LibRTMP是关闭了Nagle算法这个TCP选项的,为了实时性这样做是好的,但是要注意到LibRTMP的结构体RTMP的成员是有m ...
- WPF中如何调整TabControl的大小,使其跟随Window的大小而改变?
多年不写技术博客,手生的很,也不知道大家都关注什么,最近在研究Wpf及3d模型的展示,碰到很多问题,这个是最后一个问题,写出来小结一下...... WPF中如何调整TabControl的大小,使其跟随 ...
- Linux下调整ext3分区大小【转】
本文转载自:https://blog.csdn.net/cruise_h/article/details/22403529 本文讨论如何再不丢失数据的情况下调整已有ext3分区的大小,包括: 压缩已有 ...
- 调整swap分区大小-Linux下安装Oracle时报swap不够解决方法
调整swap分区大小 方法一:如果磁盘有剩余的空间,用分区工具新建一个swap分区.并写到/etc/fstab里面.再 #swapon -a方法二:可以用一个文件做交换分区. su root cd / ...
- Qt禁止调整窗口的大小
项目中使用的是基于对话框的程序,所以限制调整窗口大小会比较合适,下面是两种方法. 1.使用代码修改 #include "dialog.h" #include "ui_di ...
- Flash图表控件FusionCharts调整图表百分比大小
用户可以为图表的宽度和高度设置百分比值,用来替代绝对的像素值. 以百分比的方式调整图表,首先需要更新HTML代码,如下所示: <div id="chartContainer" ...
随机推荐
- SQL注入方法之:获取列名
select col_name(object_id('table'),1) from sysobjects where name='table'
- day9 函数练习题
写代码,接受n个数字,求这些数字的和 def sum_func(*args): total = 0 for i in args: total+=i return total print(sum_fun ...
- Stack Overflow:研究发现访问PHP和 Android的流量更可能来自低收入国家
Stack Overflow 的数据科学家 David Robinson 发现,软件行业的分工让不同发达地区的程序员依赖于不同的编程语言.软件已经是一个全球性的行业,也有高端低端之分,最高端的是数据 ...
- sharepoint 2007页面显示真实的错误信息
打开下面path的web.config文件:C:\Program Files\Common Files\Microsoft Shared\Web ServerExtensions\12\TEMPLAT ...
- 用DBContext (EF) 实现通用增删改查的REST方法
我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式 ...
- PopupWindow 学习总结
http://wenku.baidu.com/link?url=d48Zr6m7XJq-2JagViGTtVhsvGNHoBg9bHJCbQUJSb5tjRPx9ecavBNlL71ywrT8josV ...
- CRT&EXCRT 中国剩余定理及其扩展
前言: 中国剩余定理又名孙子定理.因孙子二字歧义,常以段子形式广泛流传. 中国剩余定理并不是很好理解,我也理解了很多次. CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法. 求满足n个条 ...
- 【LOJ#10154】选课
题目中所说的每门课都可能有先修课,也可能没有先修课,因此课与课之间的关系构成了一颗森林. 这种树上选择若干物品的最优解问题对应着树形背包问题. 阶段:子树的大小 状态:在当前子树中,选取 i 门课能够 ...
- 约会 音频mm教你追女孩
微信吧地址发给他人. 美团提前选好环境然后提前打电话订购一个位置. 微博作用是为:更多的谈资.热搜 ,最近上榜的话题说. 打车软件: 地图: 2.外表: 下澡,指甲,胡子,发型,适合服装.发型和服装搭 ...
- Swift学习笔记5
1.你可以将一个继承来的只读属性重写为一个读写属性,只需要在重写版本的属性里提供 getter 和 setter 即可.但是,你不可以将一个继承来的读写属性重写为一个只读属性. 2.你可以通过把方法, ...