2012-01-25 111 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];這需要表視圖存在。