UITableViewCell渐变层自动调整大小
我正在使用此答案中的CAGradientLayer方法在我的 UITableViewCells 上设置渐变。
但是,对于该表,我通过 tableView:heightForRowAtIndexPath: 增加了单元格的高度。我的渐变层现在不覆盖单元格的整个高度,而是停在原始高度(参见 pic< /a>)。
我尝试将图层的框架设置为 tableView:cellForRowAtIndexPath: 中的单元格边界,但这也不起作用。有没有办法指定图层应自动调整大小?
谢谢!
代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 55;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor purpleColor] CGColor],
(id)[[UIColor redColor] CGColor],
nil];
[cell.layer insertSublayer:gradient atIndex:0];
}
cell.layer.borderWidth = 1.0;
CALayer* gradientLayer = [cell.layer.sublayers objectAtIndex:0];
DebugLog(@"cell bounds: %@", NSStringFromCGRect(cell.bounds));
gradientLayer.frame = cell.bounds;
// Configure the cell...
return cell;
}
I'm using the CAGradientLayer method from this answer to set a gradient on my UITableViewCells.
However, for this table, I increased the height of the cells via tableView:heightForRowAtIndexPath:. My gradient layer now does not cover the full height of cell, but instead stops at the original height (see pic).
I tried setting the frame of the layer to the cell bounds in tableView:cellForRowAtIndexPath: but that didn't work either. Is there some way to specify the layer should be autoresized?
Thanks!
Code:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 55;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor purpleColor] CGColor],
(id)[[UIColor redColor] CGColor],
nil];
[cell.layer insertSublayer:gradient atIndex:0];
}
cell.layer.borderWidth = 1.0;
CALayer* gradientLayer = [cell.layer.sublayers objectAtIndex:0];
DebugLog(@"cell bounds: %@", NSStringFromCGRect(cell.bounds));
gradientLayer.frame = cell.bounds;
// Configure the cell...
return cell;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您的单元格高度编码为 55,则遇到此问题,那么您应该执行以下操作,然后填充此表的单元格。
不做
Had this problem if your cell height is coded as 55 then you should do the below this will then fill the cell for this table.
dont do
我认为您自定义表格单元格的方法是错误的。请参阅 http://cocoawithlove.com/2009/04/easy-custom -uitableview-drawing.html。
I think you're going the wrong way to customize your table cells. See the http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html.
我最终使用了 UITableViewDelegate' s 方法:
在其中,我检查渐变层是否已经添加,如果没有,我添加它。
对此并不完全满意,但它让我继续前进。
I ended up using UITableViewDelegate's method:
In it, I check whether the gradient layer has already been added, and if not, I add it.
Not totally happy with it, but it allowed me to move on.