如何調整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;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM