2012-01-25 41 views
16

Tôi có một UITableView đơn giản (không được nhóm) mà tôi muốn thêm một dropshadow sang trái và phải.Thêm bóng đổ vào UITableView

enter image description here

Làm cách nào để đạt được điều này? Tôi đã thử:

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

nhưng không hoạt động.

+4

Bạn đã đảm bảo rằng 'clipToBounds' và' maskToBounds' được đặt thành 'NO' (cho chế độ xem và lớp tương ứng)? – mattjgalloway

+0

Cảm ơn anh chàng, bạn nói đúng! Nếu bạn thêm câu trả lời, tôi sẽ đánh dấu câu trả lời đó là câu trả lời chính xác. –

+0

Đã trả lời. Vui vì nó đã giải quyết nó! – mattjgalloway

Trả lời

43

Bạn cần đảm bảo clipsToBoundsmasksToBounds được đặt thành NO trên chế độ xem và lớp tương ứng.

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

Cảm ơn thông tin. Nhưng nếu tôi đặt tableView.layer.masksToBounds = NO; & tableView.clipsToBounds = KHÔNG; , tableviewcell của tôi di chuyển trên giới hạn xem bảng. Tôi có tableview, imageview trong viewController của tôi. Vì vậy, một số phần được sử dụng bởi xem bảng và một số phần được sử dụng bởi iamgeview. Bạn có thể giúp tôi với nó không? – iOSAppDev

+0

@iOSAppDev Vui lòng xem câu trả lời của tôi. Nó sẽ ngăn chặn sự cố bạn đang gặp phải. –

+2

Bạn đặt một UIView đằng sau UITableView và thêm bóng cho UIView. – filou

0

Không phải là ánh sáng trắng tôi đang nhìn thấy bóng tối? Bạn không có bộ bù, vì vậy nó đang làm chính xác những gì bạn muốn. Đối với một cái bóng, thiết lập màu đen, và cho nó một bù đắp có thể là 3,5 hoặc một cái gì đó.

+0

Không, hình ảnh đó là những gì tôi đã cố gắng đạt được. Bây giờ tôi đã cố định với bình luận mattjgalloway. Dù sao cũng cảm ơn bạn. –

4

Tôi muốn chia sẻ giải pháp của tôi: Điều này đòi hỏi bạn phải phân lớp UITableView và thêm một bất động sản, vì lợi ích của cuộc biểu tình chúng ta hãy gọi nó showShadow. Thêm phần này vào tập tin .h xem bảng của bạn:

@property (nonatomic,assign) BOOL showShadow;

và @synthesize tương ứng của nó trong file .m để tạo getter và setter:

@synthesize showShadow;

Sau đó, thêm một Ivar UIView *shadowView; vào tệp .h của chế độ xem bảng. Bây giờ trong phương pháp - (id)initWithFrame:(CGRect)frame của bạn subclassed UITableView thêm đoạn mã sau đây để thiết lập quan điểm cho rằng cuối cùng sẽ bỏ cái bóng:

- (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; 
} 

Và, cuối cùng, hãy viết các phương thức setter để hiển thị/ẩn các bóng:

-(void)setShowShadow:(BOOL)s{ 

    showShadow = s; 

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

Ngoài ra nếu bạn muốn di chuyển bảng (vì lý do gì), bạn nên ghi đè lên các phương pháp -setFrame: cũng để di chuyển shadowView cùng với nó (vì nó không có trong hệ thống phân cấp xem quan điểm của bảng):

-(void)setFrame:(CGRect)frame{ 

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

} 

Bạn đã bật thành công bóng tối! Sử dụng nó như thế này:

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

CẢNH BÁO:

Bạn cần phải thiết lập các tài sản showShadow SAU bạn thêm xem bảng của bạn, bởi vì dòng table.showShadow sẽ gọi dòng [tự .superview insertSubview: shadowView belowSubview: self]; yêu cầu chế độ xem bảng tồn tại.

Các vấn đề liên quan