2012-01-25 114 views
16

我有一个普通的UITableView(未分组),我想向左侧和右侧添加阴影。将投影添加到UITableView

enter image description here

我怎样才能做到这一点?我试过了:

[self.tableView.layer setShadowColor:[[UIColor whiteColor] CGColor]]; 
[self.tableView.layer setShadowOffset:CGSizeMake(0, 0)]; 
[self.tableView.layer setShadowRadius:5.0]; 
[self.tableView.layer setShadowOpacity:1]; 

但它不起作用。

+4

你确定'clipToBounds'和'maskToBounds'设置为'NO'(分别为视图和图层)? – mattjgalloway

+0

谢谢你,你是对的!如果您添加答案,我会将其标记为正确答案。 –

+0

已回答。很高兴它解决了它! – mattjgalloway

回答

43

您需要确保clipsToBoundsmasksToBounds分别在视图和图层上设置为NO

self.tableView.clipsToBounds = NO; 
self.tableView.layer.masksToBounds = NO; 
+4

感谢您的信息。但如果我设置tableView.layer.masksToBounds = NO; &tableView.clipsToBounds = NO; ,我的tableviewcell在tableviews界限之上移动。我在我的viewController中有tableview,imageview。所以有些部分被table view使用,有些部分被iamgeview使用。你能帮我吗? – iOSAppDev

+0

@iOSAppDev请看看我的答案。它会防止你遇到的问题。 –

+2

你最好把UIView放在UITableView的后面,并把这个阴影添加到UIView中。 – filou

0

我看到的不是白色的光影吗?你没有偏移集,所以它正在做你想要的。对于阴影,将颜色设置为黑色,并给它一个可能为3.5或者其他东西的偏移量。

+0

不,那个图像是我试图实现的。现在我已经修复了mattjgalloway的评论。不管怎么说,还是要谢谢你。 –

4

我想和大家分享我的解决方案: 这需要你的子类的UITableView并添加属性,示范的缘故,让我们showShadow调用它。添加到您的表视图的.h文件中:

@property (nonatomic,assign) BOOL showShadow;

,并在.m文件及其相应的@synthesize创建getter和setter方法:

@synthesize showShadow;

然后加入伊娃UIView *shadowView;到表视图的.h文件。 现在的- (id)initWithFrame:(CGRect)frame方法的子类的UITableView添加下面的代码来设置,最终将投下的阴影角度:

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

     shadowView = [[UIView alloc]initWithFrame:self.frame]; 
     shadowView.backgroundColor = [UIColor whiteColor]; 
     shadowView.layer.shadowOpacity = 0.1; 
     shadowView.layer.shadowOffset = CGSizeMake(3, 3); 
     shadowView.layer.shadowRadius = 1; 



    } 
    return self; 
} 

最后,写的setter方法来显示/隐藏阴影:

-(void)setShowShadow:(BOOL)s{ 

    showShadow = s; 

    if(s){ 
     [self.superview insertSubview:shadowView belowSubview:self]; 
    }else{ 
     [shadowView removeFromSuperview]; 
    } 
} 

此外,如果你想移动的表(无论何种原因),你应该重写-setFrame:方法也与它一起移动shadowView(因为它不是在表视图的视图层次):

-(void)setFrame:(CGRect)frame{ 

    [super setFrame:frame]; 
    shadowView.frame = frame; 

} 

您已成功启用阴影!使用这样的:

MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)]; 
     [self.view addSubview:table]; 
     table.showShadow = YES; 

警告:

你必须设置showShadow属性你把你的表视图,因为该行table.showShadow将调用行[个体经营.superview insertSubview:shadowView belowSubview:self];这需要表视图存在。