説明が長いので少々お時間をください
ボタンのイベントで、さまざまなタイプのをロードするとUIViewController
で構成される があります。ストーリーボードを使用しています。UIButton
UITableView
UITableViewCell
Cell1
Cell2
touchUpInside
両方のセルのセパレーターはカスタマイズされています。
Cell1
セルの幅全体とセルの下部に 1 ピクセルの高さを占めるセパレーターがあります。
一方Cell2
、左右のセルから 5 ピクセルのオフセットを持つセパレーターがあります。
tableView
の外側のボタンがクリックされるたびtableViewCell
に、セル識別子に基づいて が交換されます。
最初は、セル 1tableView
の完全な幅を占め、viewController
セル 1 で構成されていますが、ボタンがタップされ、tableViewCell
セル 2 に変更され、フレームがtableView
変更され、幅が 10 縮小され、x-origin が 5 増加します。
しかし、これが発生すると、セパレーターはCell2
右側のセルから 5 ピクセル離れていますが、左側では 5 ピクセル離れています。これは、データがロードされているすべてCell2
のセルで発生し、データのないセルのフレームは適切に変更されます。
しかし、その後のセルの幅はCell1
(より大きな幅)
-(void)setSeperatorStyleForTableView :(UITableViewCell *)cell //this is called in cellForRowAtIndex
{
//cell- type of cell(Cell1 or Cell2)
CGRect seperatorFrame;
UIImageView *seperatorImage;
seperatorFrame = [self setSeperatorFrame:cell];
if(firstCellToBeLoaded)//BOOL used to change the button text and load appropriate cells
{
seperatorImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"table_row
2.png"]];
}
else
{
seperatorImage = [[UIImageView alloc] initWithImage:[UIImage
imageNamed:@"table_row.png"]];
}
seperatorImage.frame = seperatorFrame;
seperatorImage.autoresizingMask = YES;
[cell.contentView addSubview:seperatorImage];
}
//set the customized separator frame
-(CGRect)setSeperatorFrame :(UITableViewCell *)cell
{
CGRect seperatorFrame;
seperatorFrame.size.height = 1.0;
seperatorFrame.origin.y = cell.frame.origin.y + (cell.frame.size.height - 1.0);
if(firstCellToBeLoaded)
{
seperatorFrame.origin.x = cell.frame.origin.x ;
seperatorFrame.size.width = cell.frame.size.width;
}
else
{
seperatorFrame.origin.x = cell.frame.origin.x + 5.0;
seperatorFrame.size.width = cell.frame.size.width -10.0;
}
return seperatorFrame;
}