UITableViewCell selectedBackground shadow未在设备上显示

时间:2014-05-10 12:21:43

标签: objective-c ipad ios7 uitableview calayer

Image showing shadow for selected cell on Simulator but not on Device

这个让我抛出,我想知道是否有人可以提供帮助。我试图在我选择的UITableViewCell上显示一个阴影,它在模拟器上工作正常但在运行iOS 7.0.4的iPad 3rd Gen上没有。

我有一个子类UITableViewCell,它将子类UIView分配/作为其selectedBackground。除了没有在设备上显示外,一切正常。

在我的子类UITableViewCell中......

- (void)awakeFromNib
{
    self.selectedBackgroundView = [[OTHD_CellSelectedView alloc] initWithFrame:self.bounds];

}

在我的OTHD_CellSelectedView ...

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self createLayer];
    }
    return self;
}

- (void) createLayer
{
    CALayer *the_layer = [CALayer layer];
    [self.layer insertSublayer:the_layer atIndex:0];

    the_layer.frame = self.bounds;
    the_layer.backgroundColor = [[UIColor whiteColor] CGColor];
    the_layer.shadowColor = [UIColor blackColor].CGColor;
    the_layer.shadowOffset = CGSizeMake(0, 0);
    the_layer.shadowRadius = 10.0;
    the_layer.shadowOpacity = 0.7;
}

1 个答案:

答案 0 :(得分:1)

我认为你应该把表格中的单元格带到桌面上我试过这个并且它对我有用...我希望这会对你有所帮助:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"Cell"];
    }

    if (indexPath.row == selected)
    {
        cell.layer.backgroundColor = [[UIColor whiteColor] CGColor];
        cell.layer.shadowColor = [UIColor blackColor].CGColor;
        cell.layer.shadowOffset = CGSizeMake(0, 0);
        cell.layer.shadowRadius = 10.0;
        cell.layer.shadowOpacity = 0.7;

        [cell.superview bringSubviewToFront:cell];
    }
    else
    {
        cell.layer.shadowOpacity = 0;
    }


    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    selected = indexPath.row;
    [tableView reloadData];

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:(UITableViewRowAnimationNone)];
}