Внутренняя тень UITableViewCell только с правой стороны

Я пытаюсь создать внутреннюю тень для UITableViewCell только с правой стороны. Вот как я это делаю,

if (![cell viewWithTag:100]) {
UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(DEVICE_WIDTH, 0, 10, height)];
shadowView.layer.shadowColor = [UIColor darkGrayColor].CGColor;        
shadowView.layer.shadowRadius = 5.0;
shadowView.layer.shadowOffset = CGSizeMake(-2, 0);
shadowView.layer.shadowOpacity = 0.8;
shadowView.backgroundColor = [UIColor darkGrayColor];
shadowView.tag = 100;

shadowView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

[cell addSubview:self.shadowView];
}

Но вот моя проблема в том, что каждый раз, когда я прокручиваю, тень становится темнее. Также выходит за границы ячейки и портит оформление ячейки. Я подозреваю, что его добавляют неоднократно. Может ли кто-нибудь помочь мне решить эту проблему? Мне не интересно использовать изображение для тени. Поэтому любое другое решение, кроме использования изображения, будет оценено. Заранее спасибо.


person Sasi    schedule 16.03.2014    source источник


Ответы (3)


Убедитесь, что вы правильно используете dequeueReusableCellWithIdentifier. следующий код отлично работает для меня

- (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];
        NSLog(@"new cell");

            UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(320, 0, 10, 44)];
            shadowView.layer.shadowColor = [UIColor darkGrayColor].CGColor;
            shadowView.layer.shadowRadius = 5.0;
            shadowView.layer.shadowOffset = CGSizeMake(-2, 0);
            shadowView.layer.shadowOpacity = 0.8;
            shadowView.backgroundColor = [UIColor darkGrayColor];
            shadowView.tag = 100;
            shadowView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

            [cell addSubview:shadowView];
    }
    else
    {
        NSLog(@"old cell");
    }

    return cell;
}
person karthikPrabhu Alagu    schedule 18.03.2014

Я нашел проблему. Я должен был сделать,

self.contentView.superview.clipsToBounds = YES;
    self.contentView.clipsToBounds = YES;

Теперь все работает как шарм.

person Sasi    schedule 18.03.2014

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

один убедитесь, что оттенок не добавлен, и вы не добавляете его снова.

or

Удалите все вложенные представления и добавьте их снова при создании ячеек.

person m-farhan    schedule 16.03.2014