UITableViewCell градиентный слой автоматически изменяет размер - PullRequest
0 голосов
/ 27 октября 2010

Я использую метод CAGradientLayer из этого ответа , чтобы установить градиент для моих UITableViewCells.

Однако для этой таблицы я увеличил высоту ячеек с помощью tableView: heightForRowAtIndexPath :.Мой градиентный слой теперь не покрывает всю высоту ячейки, но вместо этого останавливается на исходной высоте (см. pic ).

Я попытался установить рамку слоя на границы ячейки в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;
}

Ответы [ 3 ]

2 голосов
/ 24 января 2013

Если бы у вас была эта проблема, если ваша высота ячейки закодирована как 55, вы должны сделать следующее, это заполнит ячейку этой таблицы.

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = CGRectMake(0, 0, 320, 55);

не делай

    gradientLayer.frame = cell.bounds;
0 голосов
/ 18 декабря 2010

В итоге я использовал UITableViewDelegate метод:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath;

В нем я проверяю, был ли слой градиента уже добавлен, и если нет, я его добавляю.
Не совсем доволен этим, но это позволило мне двигаться дальше.

0 голосов
/ 02 ноября 2010

Я думаю, что вы идете неправильным путем, чтобы настроить ячейки таблицы. См http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...