我希望将UITableView
设置为样式,如果它具有样式UITableViewStyleGrouped
但具有一些细微差别(如不同的颜色和圆角较短的半径)。行具有可变高度。我想在我的应用程序中为大多数表视图控制器使用此自定义样式。查看Twitter,Groupon和& GitHub以示例的方式发布应用程序。
我该怎么做?
我正在考虑像UITableViewStyleGrouped
那样做。 UITableViewStyleGrouped
设置backgroundView
& selectedBackgroundView
UIGroupTableViewCellBackground
的实例UIView
(UIGroupTableViewCellBackground
的子类)。 drawLayer:
是其图层的委托,并实施CGImageRef
将其图层内容设置为CGImageRef
。
我很确定Apple会根据Quartz 2D Programming Guide : Creating a Bitmap Graphics Context创建此CGLayer
,这也建议考虑使用UITableViewStyleGrouped
而不是绘制到位图图形上下文。哪个更适合这个应用程序?
此外,UIImageView
表格视图的第一个单元格使用UIImage
将带有圆角的阴影添加到其顶部(它将其设置为可调整大小(宽度方向){{ 1}}带有半透明的PNG文件。)为什么这样做?这不是慢滚动吗?为什么不将它绘制到第一个单元格的CGImageRef
?也许性能的下降并不显着,并且使用图像更容易使细胞看起来更正确。我将单元格的CGImageRef
保存到磁盘并使用预览打开它。它仍然有圆角。这个重叠的视图只是添加了顶部阴影。
下面是在我的设备上运行Core Graphics Instruments工具的屏幕截图,其中为UITableViewStyleGrouped
表视图选择了“Color Blended Layers”。你可以看到顶部的阴影是混合的。并且,看起来在最后一个单元格中也有一些混合。
选择第三个单元格(不混合)。选择第一个或最后一个单元格的行为相同,但不会删除已经混合的重叠视图。
答案 0 :(得分:0)
您可以计算正在绘制的行数,并将图像设置为单个单元格的背景。
你要做的是
cell.backgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_normal.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];
cell.selectedBackgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_pressed.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];
使用此方法设置背景图像
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
&&&&
if((indexPath.row)==0)
// set image upper corner image here
else if (indexPath.row==1)
//set normal image here
else if (indexPath.row==YourArray)
// also set the lower corner round image in the last low, which can be calculated by comparing indexpath.row to the mutablearray/array
}
你也可以在&&&&如果是array.count == 1
,则应用不同的图像,其中上下角都是圆的