为选定的 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 中设置图标的背景颜色?

iOS-tableViewCell选中时背景颜色消失问题

根据滚动百分比逐渐改变 TableViewCell 图层背景颜色

在 Swift 中为选定的 UIPickerView 行设置动画背景颜色

突出显示/选定状态问题的 UIButton 背景颜色