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.
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
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. –
Đã trả lời. Vui vì nó đã giải quyết nó! – mattjgalloway