请耐心一些,因为这是一个较长的解释。
我有一个UIViewController
,其中包含一个UIButton
和一个UITableView
,它加载不同类型的带有标识符Cell1
和Cell2
的UITableViewCell
。当点击按钮上的事件touchUpInside
时,会根据单元格标识符交换tableViewCell
。我使用故事板。
两种单元格的分隔符都进行了自定义。
Cell1
具有占据整个单元格底部、高度为1像素的分隔符。
而Cell2
的分隔线距离单元格左右各偏移了5像素。
每次单击tableView
外部的按钮时,tableViewCell
根据单元格标识符被交换。
最初,tableView
占据viewController
的全部宽度,并包含Cell1
,但在点击按钮后,tableViewCell
被更改为Cell2
,并且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;
}
backgroundColor
都会被重置为透明。因此,最好创建一个简单的UIView
子类,在drawRect:
中用给定的颜色填充自身,而不是使用backgroundColor
。另外,分隔线不能放在contentView
中(因为删除按钮、辅助视图等),必须直接放在单元格中。 - Sulthan