2

我有一个带有 UITableView 的 UIViewController。位于视图控制器的视图内,四周都有一些填充。我正在尝试从表格视图和圆角中绘制阴影,但我无法同时实现两者。我已尝试使用以下代码并打开和关闭 maskToBounds,但将其设置为 NO 会创建一个非常奇怪的阴影滚动效果,并且调用不会在表格内剪切。

[self.tableView.layer setShadowColor:[UIColor blackColor].CGColor];
[self.tableView.layer setShadowOffset:CGSizeMake(0, 3)];
[self.tableView.layer setShadowOpacity:0.4];
[self.tableView.layer setShadowRadius:3.0f];
[self.tableView.layer setCornerRadius:5.0f];
[self.tableView.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.tableView.bounds cornerRadius:5.0f] CGPath]];

我也只是在画一个简单风格的 UITableView。我想要达到的效果可以在免费应用程序Transit App中看到,这是一部电影,你可以看到阴影停留,桌子甚至有一个上下滚动的蒙版。

我进行了搜索和搜索,但无法根据其他 SO 答案或在线文章组合出一个解决方案。帮助表示赞赏。

4

6 回答 6

5

试试下面的链接,其中一些是旧的,但你可以得到一些指针。

自定义表格效果

阴影 2

酷表视图

滴影

好的!!我再次尝试并获得了效果,这再次只是一种解决方法(而不是使用图像),以下是我尝试过的

创建一个 CALayer,与您的 tableview 具有相同的框架,给出相同的曲线和所有,在该层的顶部添加 table view,就是这样。

CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor blueColor].CGColor; // If you dont give this, shadow will not come, dont know why
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 1.0;
sublayer.cornerRadius = 5.0;
sublayer.frame = CGRectMake(myTable.frame.origin.x, myTable.frame.origin.y, myTable.frame.size.width, myTable.frame.size.height);
[self.view.layer addSublayer:sublayer];

[self.view.layer addSublayer:myTable.layer];

啊!!由于某种原因,我无法从我的机器、防火墙上传屏幕截图;-)。我会在家里尝试。

在此处输入图像描述

-anoop

于 2012-07-31T12:18:19.257 回答
0

我知道这是一个相当老的问题,但我最近遇到了同样的问题,这里的解决方案是很好的例子,但还不够完整。所以这是我用来创建表格视图阴影的方法。它也可以用于任何其他视图。

-(void)makeShadowToView:(UIView*) view withHeight:(CGFloat)shadowHeight
{
    CGRect bounds = view.frame;
    bounds.size.height = shadowHeight;
    view.clipsToBounds = NO; // Without this row it doesn't display any shadow, at least for a table view
    view.layer.shadowColor = [UIColor blackColor].CGColor;
    view.layer.shadowOpacity = 0.9f;
    view.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    view.layer.shadowRadius = 5.0f;
    view.layer.shadowPath = [UIBezierPath bezierPathWithRect:bounds].CGPath;
}

示例用法:如果您想根据表格内容的高度重新计算阴影的高度,则添加[self makeShadowToView:self.view withHeight:height]; where 。height

于 2013-05-31T13:23:25.643 回答
0

建议在大tableview的阴影中使用图像,所有绘图都会降低性能,这可能会导致糟糕的用户体验,只是一个建议

于 2012-07-31T14:20:39.977 回答
0
(void)shadowForView{
CALayer *layer = self.viewActionMenu.layer;
layer.shadowOffset = CGSizeMake(-2, 0);
layer.shadowColor = [[UIColor blackColor] CGColor];
layer.shadowRadius = 2.0f;
layer.shadowOpacity = 0.80f;
// [self.view bringSubviewToFront:self.actionView];
                   }

并致电:

[self shadowForView];
于 2014-12-02T09:20:49.870 回答
0

尝试这个

UITableView * objTableview=[[UITableView alloc]initWithFrame:CGRectMake(x, y, w, h)];

UIView * objViewShadow=[[UIView alloc]initWithFrame:objTableview.bounds];

objTableview.layer.cornerRadius=5;

// add shadow

objViewShadow.layer.shadowOffset = CGSizeMake(0, 3);

objViewShadow.layer.shadowRadius = 5.0;

objViewShadow.layer.shadowColor = [UIColor blackColor].CGColor;

objViewShadow.layer.shadowOpacity = 0.8;

[objViewShadow addSubview:objTableview];

[self.view addSubview:objViewShadow];
于 2014-09-16T13:43:22.240 回答
0

您需要设置这两个属性

self.tableView.clipsToBounds = 否;

self.tableView.layer.masksToBounds = 否;

于 2017-02-07T11:38:47.553 回答