为选定的 tableviewCell 的背景颜色设置框架在 iOS 7 中工作正常但在 iOS 6 中没有
Posted
技术标签:
【中文标题】为选定的 tableviewCell 的背景颜色设置框架在 iOS 7 中工作正常但在 iOS 6 中没有【英文标题】:Setting frame for background colour of Selected tableviewCell working fine in iOS 7 but not in iOS 6 【发布时间】:2014-05-22 15:21:21 【问题描述】:我想为选定的 tableviewCell 的背景颜色设置框架。我正在使用以下代码。
UIView * cellBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
cellBackgroundView.backgroundColor = [UIColor clearColor];
UIView * selectedCellColor = [[UIView alloc] initWithFrame:CGRectMake(5, 0, 300, 44)];
selectedCellColor.backgroundColor = [UIColor colorWithRed:50.0/255.0 green:50.0/255.0 blue:50.0/255.0 alpha:1.0];
[cellBackgroundView addSubview:selectedCellColor];
cell.selectedBackgroundView = cellBackgroundView;
这在 ios7 中运行良好。即使是 Tableview 选择也不能在 iOS6 中工作。
以下代码在 iOS6 和 iOS 7 中都可以正常工作。但在这里我无法为所选 tableViewCell 的背景颜色设置框架。
UIView *selectedCellColor = [[UIView alloc] init];
[selectedCellColor setFrame:CGRectMake(0, 0, 320, 44)];
selectedCellColor.backgroundColor = [UIColor colorWithRed:50.0/255.0
green:50.0/255.0
blue:50.0/255.0
alpha:1.0];
cell.selectedBackgroundView=selectedCellColor;
【问题讨论】:
【参考方案1】:在cellForRowAtIndexPath:
中,调用dequeueReusableCellWithIdentifier:forIndexPath:
(不仅仅是dequeueReusableCellWithIdentifier:
。原因是现在您的单元格大小正确。不要硬编码单元格大小;将其作为单元格的bounds
交给你了。
现在绘制一个该尺寸的 UIImage,构建您的类似框架的绘图(图像本身一开始就很清楚)。将其放入 UIImageView 并将单元格的选定背景视图设置为该图像视图。
这适用于 iOS 6 和 iOS 7。
示例(颜色和大小任意,仅用于说明目的):
UIGraphicsBeginImageContextWithOptions(cell.bounds.size, NO, 0);
// change this color as you like
[[UIColor redColor] setFill];
// fiddle with this size as you like
[[UIBezierPath bezierPathWithRect:CGRectMake(10,10,300,25)] fill];
UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView* iv = [[UIImageView alloc] initWithImage:im];
cell.selectedBackgroundView = iv;
【讨论】:
我试过这样 UIImageView *bGImage =[[UIImageView alloc]initWithFrame:cell.contentView.frame]; bGImage.backgroundColor =[UIColor clearColor]; UIView * selectedCellColor = [[UIView alloc] initWithFrame:CGRectMake(5, 0, 300, 44)]; selectedCellColor.backgroundColor = [UIColor colorWithRed:50.0/255.0 green:50.0/255.0 blue:50.0/255.0 alpha:1.0]; [bGImage addSubview:selectedCellColor]; cell.selectedBackgroundView = bGImage;但是在 iOS6 中,tableview 选择的颜色没有改变。但它在 iOS7 中运行良好 但是你没有按照我说的做(画图)。 我添加了代码来向您展示如何绘制图像。有关如何绘制的更多信息,请在此处查看我的完整讨论:apeth.com/iOSBook/ch15.html 感谢您的详细解答。它的工作就像一个魅力 谢谢!澄清一下:问题在于,在 iOS 6 上,您无法控制框架如何操作选定的背景视图。这就是你使用图像视图的原因:你可以控制图像,所以现在你可以做你想做的事了。【参考方案2】:编辑
试试这个:
[cell.contentView setBackgroundColor:[UIColor redColor]];
UIView *selectedBG = [[UIView alloc]initWithFrame:cell.contentView.frame];
[selectedBG setBackgroundColor:[UIColor greenColor]];
[cell.selectedBackgroundView addSubview:selectedBG];
【讨论】:
当我点击单元格时,使用上面的代码选择颜色(绿色)覆盖整个单元格。但我需要与 x 原点有一些差距,例如 (10,0,310,44) 在创建你选择的BG时试试这个UIView *selectedBG = [[UIView alloc]initWithFrame:CGRectMake(10,0,cell.contentView.frame.size.width-10, cell.contentView.frame.size.height)];
@user3373798 您不负责selectedBackgroundView
的大小。您必须响应实际的大小。
即使我放了 cell.contentView.frame.size.width-100,点击时总单元格背景颜色会出现以上是关于为选定的 tableviewCell 的背景颜色设置框架在 iOS 7 中工作正常但在 iOS 6 中没有的主要内容,如果未能解决你的问题,请参考以下文章
根据滚动百分比逐渐改变 TableViewCell 图层背景颜色