一般情况下,我们使用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的大小的更多相关文章

  1. 矢量图绘制工具Svg-edit调整画布的大小

    矢量图绘制工具Svg-edit调整画布的大小 ------------------------------ ------------------------

  2. C#-禁止调整窗体的大小

    要是想禁止调整窗体的大小,可以查看:FormBorderStyle属性,该属性的设置中有一个"FixedSingle"的选择项,它可以禁止调整窗体的大小.

  3. VMware虚拟机中调整Linux分区大小手记(转发)

      前段时间用VMware5.5安装了CentOS5.3,安装的时候分配了5Gb的虚拟硬盘空间给Linux系统,系统安装选择很多组件和软件,后面使用时又安装也一些软件,结果导致虚拟硬盘空间不足.查看分 ...

  4. LibRTMP优化之调整输出块大小

    1. 为什么要调整输出块大小 首先在RTMP_Connect0函数中LibRTMP是关闭了Nagle算法这个TCP选项的,为了实时性这样做是好的,但是要注意到LibRTMP的结构体RTMP的成员是有m ...

  5. WPF中如何调整TabControl的大小,使其跟随Window的大小而改变?

    多年不写技术博客,手生的很,也不知道大家都关注什么,最近在研究Wpf及3d模型的展示,碰到很多问题,这个是最后一个问题,写出来小结一下...... WPF中如何调整TabControl的大小,使其跟随 ...

  6. Linux下调整ext3分区大小【转】

    本文转载自:https://blog.csdn.net/cruise_h/article/details/22403529 本文讨论如何再不丢失数据的情况下调整已有ext3分区的大小,包括: 压缩已有 ...

  7. 调整swap分区大小-Linux下安装Oracle时报swap不够解决方法

    调整swap分区大小 方法一:如果磁盘有剩余的空间,用分区工具新建一个swap分区.并写到/etc/fstab里面.再 #swapon -a方法二:可以用一个文件做交换分区. su root cd / ...

  8. Qt禁止调整窗口的大小

    项目中使用的是基于对话框的程序,所以限制调整窗口大小会比较合适,下面是两种方法. 1.使用代码修改 #include "dialog.h" #include "ui_di ...

  9. Flash图表控件FusionCharts调整图表百分比大小

    用户可以为图表的宽度和高度设置百分比值,用来替代绝对的像素值. 以百分比的方式调整图表,首先需要更新HTML代码,如下所示: <div id="chartContainer" ...

随机推荐

  1. BZOJ4010[HNOI2015]菜肴制作——拓扑排序+堆

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴 ...

  2. BZOJ5010 FJOI2017矩阵填数(容斥原理)

    如果只考虑某个子矩阵的话,其最大值为v的方案数显然是vsize-(v-1)size.问题在于处理子矩阵间的交叉情况. 如果两个交叉的子矩阵所要求的最大值不同,可以直接把交叉部分划给所要求的最大值较小的 ...

  3. BZOJ4516 SDOI2016生成魔咒(后缀数组+平衡树)

    一个字符串本质不同的子串数量显然是总子串数减去所有height值.如果一个个往里加字符的话,每次都会改动所有后缀完全没法做.但发现如果从后往前加的话,每次只会添加一个后缀.于是我们把字符串倒过来,每次 ...

  4. Stack Overflow:研究发现访问PHP和 Android的流量更可能来自低收入国家

    Stack Overflow 的数据科学家  David Robinson 发现,软件行业的分工让不同发达地区的程序员依赖于不同的编程语言.软件已经是一个全球性的行业,也有高端低端之分,最高端的是数据 ...

  5. 18 Zabbix 新增map中的icon图标

    点击返回:自学Zabbix之路 18 Zabbix 新增map中的icon图标 zabbix系统默认会带有许多的icon图标,但对于特殊需求人群可能无法满足,那就需要新增icon图标. 通过Admin ...

  6. sql server 小技巧(1) 导入csv数据到sql server

    1. 右击 DataBaseName,选择 Tasks->Import Data 2. 选择数据源: Flat File Source , 选择一个csv文件 Advance: 选择所有的列,改 ...

  7. 【转】19个必须知道的Visual Studio快捷键

    本文将为大家列出在Visual Studio中常用的快捷键,正确熟练地使用快捷键,将大大提高你的编程工作效率. 项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt ...

  8. 【ATcoder s8pc_3 F】 寿司

    http://s8pc-3.contest.atcoder.jp/tasks/s8pc_3_f (题目链接) 题意 有一个长度为$N$的数列$A$,初始为$0$.$Q$次操作,每次两个参数$x,y$. ...

  9. 树链剖分&dfs序

    树上问题 很多处理区间的问题(像是RMQ,区间修改).可以用线段树,树状数组,ST表这些数据结构来维护.但是如果将这些问题挪到了树上,就不能直接用这些数据结构来处理了.这时就用到了dfs序和树链剖分. ...

  10. (转)Java中equals和==、hashcode的区别

    背景:学习辉哥总结的基础知识,从头来,直面短板. 1 问题引入及分析 请看下面的代码清单1 @Test public void test01() { String a = "a" ...