向UITableView添加投影不能正常工作

时间:2012-02-01 02:05:09

标签: iphone uitableview dropshadow quartz-core

我已经创建了一个示例应用,用于向UITableView添加投影。单击右侧导航按钮时,会向表中添加阴影。问题是阴影仅添加到屏幕中可见的表格部分。如果我尝试向上滚动(并离开桌子)或向下滚动并查看其他单元格,则阴影不可见。如何为表格的整个高度设置阴影?如果可能的话,如果我向上滚动并离开桌子(对于弹跳效果),我也会有阴影。我附上了两个屏幕截图和代码。

在第一个屏幕截图中,我向下滚动以查看其他单元格,在第二个向上滚动以触发默认的UITableView反弹效果。

enter image description here enter image description here

以下是代码:

- (void)printIt:(id)sender
{
    [self.tableView.layer setShadowColor:[[UIColor orangeColor] CGColor]];
    [self.tableView.layer setShadowOffset:CGSizeMake(0, 0)];
    [self.tableView.layer setShadowRadius:15.0];
    [self.tableView.layer setShadowOpacity:0.8];
    [self.tableView.layer setMasksToBounds:NO];
    self.tableView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.tableView.layer.bounds].CGPath;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIBarButtonItem *testButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(printIt:)];
    self.navigationItem.rightBarButtonItem = testButton;
    [testButton release];
}

#pragma mark UITableView methods

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
    }

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 105;
}

1 个答案:

答案 0 :(得分:5)

处理此问题的最简单方法是将表格视图嵌入UIView内,并在UIView上设置阴影。