Cocoa touch 带阴影的分组UITableView

Cocoa touch 带阴影的分组UITableView,cocoa-touch,uikit,shadow,uitableview,Cocoa Touch,Uikit,Shadow,Uitableview,我正在尝试使用自定义背景在分组的UITableView后面添加阴影。这很难。我失败了。我一直在试验细胞层阴影参数,但不管我怎么做,阴影最终会覆盖另一侧的另一个细胞。我只希望阴影均匀地出现在tableview中每个部分的轮廓之外 如果有人对如何用最简单的方法解决这个问题有想法,我们将不胜感激 供将来参考;最后,我使用一个自定义UITableView子类解决了这个问题,该子类在其layoutSubviews方法中添加了一个空但有阴影的层: ShadowTableView.h: @interface

我正在尝试使用自定义背景在分组的UITableView后面添加阴影。这很难。我失败了。我一直在试验细胞层阴影参数,但不管我怎么做,阴影最终会覆盖另一侧的另一个细胞。我只希望阴影均匀地出现在tableview中每个部分的轮廓之外


如果有人对如何用最简单的方法解决这个问题有想法,我们将不胜感激

供将来参考;最后,我使用一个自定义UITableView子类解决了这个问题,该子类在其layoutSubviews方法中添加了一个空但有阴影的层:

ShadowTableView.h:

@interface ShadowTableView : UITableView {
    CALayer *shadowLayer;
}

@end
ShadowTableView.m:

#import "ShadowTableView.h"
#import <QuartzCore/QuartzCore.h>

@implementation ShadowTableView

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
    self = [super initWithFrame:frame style:style];
    if (self) {
        shadowLayer = [[CALayer alloc] init];

        shadowLayer.backgroundColor = [kCellBgColor CGColor];
        shadowLayer.cornerRadius = 10.0;
        shadowLayer.shadowOpacity = 1.6;
        shadowLayer.shadowOffset = CGSizeMake(0, 3);
        shadowLayer.shadowColor = [[UIColor blackColor] CGColor];
        shadowLayer.shadowRadius = 8.0;
    }
    return self;
}

- (void)dealloc {
    [shadowLayer release];

    [super dealloc];
}

- (void)layoutSubviews {
    [super layoutSubviews];

    if (!shadowLayer.superlayer) {
        [self.layer insertSublayer:shadowLayer atIndex:0];
    }

    shadowLayer.frame = CGRectMake(10.0, 10.0, 300.0,
        self.rowHeight * [self.dataSource tableView:self numberOfRowsInSection:0] + 1);
}
#导入“ShadowTableView.h”
#进口
@ShadowTableView的实现
-(id)initWithFrame:(CGRect)框架样式:(UITableViewStyle)样式{
self=[super initWithFrame:frame-style:style];
如果(自我){
阴影层=[[CALayer alloc]init];
shadowLayer.backgroundColor=[kCellBgColor CGColor];
shadowLayer.cornerRadius=10.0;
shadowLayer.shadowOpacity=1.6;
shadowLayer.shadowOffset=CGSizeMake(0,3);
shadowLayer.shadowColor=[[UIColor blackColor]CGColor];
shadowLayer.shadowRadius=8.0;
}
回归自我;
}
-(无效)解除锁定{
[阴影层释放];
[super dealoc];
}
-(无效)布局子视图{
[超级布局子视图];
如果(!shadowLayer.superlayer){
[self.layer insertSublayer:shadowLayer atIndex:0];
}
shadowLayer.frame=CGRectMake(10.0,10.0,300.0,
self.rowHeight*[self.dataSource tableView:self numberofrowsin节:0]+1);
}

@结束

以备将来参考;最后,我使用一个自定义UITableView子类解决了这个问题,该子类在其layoutSubviews方法中添加了一个空但有阴影的层:

ShadowTableView.h:

@interface ShadowTableView : UITableView {
    CALayer *shadowLayer;
}

@end
ShadowTableView.m:

#import "ShadowTableView.h"
#import <QuartzCore/QuartzCore.h>

@implementation ShadowTableView

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
    self = [super initWithFrame:frame style:style];
    if (self) {
        shadowLayer = [[CALayer alloc] init];

        shadowLayer.backgroundColor = [kCellBgColor CGColor];
        shadowLayer.cornerRadius = 10.0;
        shadowLayer.shadowOpacity = 1.6;
        shadowLayer.shadowOffset = CGSizeMake(0, 3);
        shadowLayer.shadowColor = [[UIColor blackColor] CGColor];
        shadowLayer.shadowRadius = 8.0;
    }
    return self;
}

- (void)dealloc {
    [shadowLayer release];

    [super dealloc];
}

- (void)layoutSubviews {
    [super layoutSubviews];

    if (!shadowLayer.superlayer) {
        [self.layer insertSublayer:shadowLayer atIndex:0];
    }

    shadowLayer.frame = CGRectMake(10.0, 10.0, 300.0,
        self.rowHeight * [self.dataSource tableView:self numberOfRowsInSection:0] + 1);
}
#导入“ShadowTableView.h”
#进口
@ShadowTableView的实现
-(id)initWithFrame:(CGRect)框架样式:(UITableViewStyle)样式{
self=[super initWithFrame:frame-style:style];
如果(自我){
阴影层=[[CALayer alloc]init];
shadowLayer.backgroundColor=[kCellBgColor CGColor];
shadowLayer.cornerRadius=10.0;
shadowLayer.shadowOpacity=1.6;
shadowLayer.shadowOffset=CGSizeMake(0,3);
shadowLayer.shadowColor=[[UIColor blackColor]CGColor];
shadowLayer.shadowRadius=8.0;
}
回归自我;
}
-(无效)解除锁定{
[阴影层释放];
[super dealoc];
}
-(无效)布局子视图{
[超级布局子视图];
如果(!shadowLayer.superlayer){
[self.layer insertSublayer:shadowLayer atIndex:0];
}
shadowLayer.frame=CGRectMake(10.0,10.0,300.0,
self.rowHeight*[self.dataSource tableView:self numberofrowsin节:0]+1);
}

@结束

所说的“表视图的轮廓之外”是指每个“分组”部分吗?是的,完全正确。感谢您的澄清我尝试了另一种方法:在单元格背景视图中使用带有
CGContextSetShadowWithColor
的自定义绘图,但阴影会在tablecell的边界上被剪裁。所以,到目前为止也没有成功。你所说的“表视图大纲之外”是指每个“分组”部分吗?是的,没错。感谢您的澄清我尝试了另一种方法:在单元格背景视图中使用带有
CGContextSetShadowWithColor
的自定义绘图,但阴影会在tablecell的边界上被剪裁。因此,到目前为止也没有成功。请提供更多详细信息。Eligo请提供更多详细信息,因为其他人可能正在寻找如何做到这一点。请提供更多详细信息。Eligo请提供更多详细信息,因为其他人可能正在寻找如何做到这一点。