zoukankan      html  css  js  c++  java
  • 如何调整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;

    }

  • 相关阅读:
    c++错误崩溃3
    c++崩溃错误2
    c++多线程崩溃错误1
    MySQL UNSIGNED
    2PC和3PC
    proxy-target-class="false"与proxy-target-class="true"区别
    Spring MVC processing flow
    Spring中自动装配的模式
    Spring中BeanFactory和ApplicationContext的区别
    什么是Spring
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/4717532.html
Copyright © 2011-2022 走看看