2012-07-30 149 views
2

我有一個帶有UITableView的UIViewController。坐在視圖控制器的視圖內,四周有一些填充。我試圖從表格視圖中繪製陰影以及圓角,但我無法同時實現兩者。我已經嘗試使用以下代碼並將masksToBounds打開和關閉,但將其設置爲NO會創建陰影滾動的非常奇怪的效果,並且這些調用不會在表格內裁剪。帶有陰影和角半徑的UITableView(附帶電影示例)

[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中看到,這裏是一個movie,您可以在其中看到陰影保持不變,桌面甚至有一個可以上下滾動的蒙版。

我已經搜索和搜索,並沒有能夠根據其他SO答案或在線文章放在一起的解決方案。幫助讚賞。

回答

5

嘗試下面的鏈接,其中一些是舊的,但你可以得到一些指針。

Custom Table Effects

Dropshadow 2

Cool Table Views

DropShadow

好吧!我再次嘗試並得到一個效果,它只是一個工作(而不是使用圖像),下面是我嘗試的

創建一個CALayer,與您的tableview具有相同的幀,給出相同的曲線和所有,在這個圖層上添加表格視圖,就是這樣。

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]; 

啊!由於某種原因,我無法從我的機器,防火牆上傳屏幕截圖;-)。我會嘗試從我家。

enter image description here

-anoop

+0

非常感謝,不幸的是這些例子對我來說對我來說很有用。 – runmad 2012-07-31 14:35:05

+0

第一個鏈接是否給了你想要的效果?你是否運行了示例代碼?我能夠看到桌子四周的陰影。我剛剛完成了他的項目,發現他的所有圖像都帶有陰影,他用它來繪製單元格,並且很好地完成了也。還有更多的東西想要實現嗎? – anoop4real 2012-08-01 08:50:43

+0

沒有第一個例子是每個細胞周圍的陰影。我想要實現的是帶有圓角和陰影的整個桌子。然後細胞被掩蓋在桌子的框架內。 – runmad 2012-08-01 11:58:48

0

建議使用陰影大tableviews圖像,所有的繪畫具有降低性能的能力,這可能會導致糟糕的用戶體驗,只是一個字的意見

+0

陰影在表格外是靜態的,所以它不應該影響繪圖,因爲單元格沒有陰影。 – runmad 2012-07-31 14:34:42

+0

我仍然留意你的滾動性能壽。只是一些建議 – Andyy 2012-08-01 10:08:36

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]; 其中height的情況下添加您需要根據表格內容的高度來重新計算陰影的高度。

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]; 
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]; 
0

您需要設置兩個屬性

self.tableView.clipsToBounds = NO;

self.tableView.layer.masksToBounds = NO;