iOS UITableView:usingCAGradientLayer 导致初始对象不出现在表格视图中
Posted
技术标签:
【中文标题】iOS UITableView:usingCAGradientLayer 导致初始对象不出现在表格视图中【英文标题】:iOS UITableView: usingCAGradientLayer causes the initial objects to not appear in table view 【发布时间】:2012-04-19 10:11:48 【问题描述】:正如我在问题 here 中所讨论的,我尝试使用 CAGradientLayer 设置 UITableView 的背景颜色。我正在用 NSMutableArray 中的一些值填充 UITableView,如下所示...
- (void)viewDidLoad
// ....
if (!navigationItems)
navigationItems = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSArray *colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:213.0f/255.0f green:91.0f/255.0f blue:92.0f/255.0f alpha:1.0f] CGColor][[UIColor colorWithRed:213.0f/255.0f green:0.0f blue:0.0f alpha:1.0f] CGColor], nil];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colors;
gradientLayer.frame = tableView.bounds;
[tableView.layer insertSublayer:gradientLayer atIndex:0];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
cell.textLabel.text = [navigationItems objectAtIndex:indexPath.row];
cell.textLabel.textColor = [UIColor blackColor];
return cell;
发生的情况是,填充有初始值的单元格似乎与我设置的渐变颜色重叠。这些单元格中没有文本/边框出现(在这种情况下,单元格的值为1
、2
、3
、4
)。我在这里做错了什么?
【问题讨论】:
【参考方案1】:将 backgroundView 设置为 tableView 对我有用。我是这样做的:
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colors;
gradientLayer.frame = tableView.bounds;
//[tableView.layer insertSublayer:gradientLayer atIndex:0];
UIView *tableBackgroundView = [[UIView alloc] init];
[tableBackgroundView.layer insertSublayer:gradientLayer atIndex:0];
[self.tableView setBackgroundView:tableBackgroundView];
【讨论】:
【参考方案2】:注意insertSublayer
方法!每次回收单元格时,您都在插入新层。因此,经过几次迭代,您将在单元格内拥有一堆层。
为避免这种情况,每次都像这样运行一个简单的循环:
for (CALayer *layer in [cell.barView.layer.sublayers reverseObjectEnumerator])
if ([layer isKindOfClass:[CAGradientLayer class]])
[layer removeFromSuperlayer];
break;
【讨论】:
以上是关于iOS UITableView:usingCAGradientLayer 导致初始对象不出现在表格视图中的主要内容,如果未能解决你的问题,请参考以下文章