Tôi có một ViewController với một nền gradient xuyên tâm. Bên trong đó tôi có một UITableView với các tế bào và các phần. Bây giờ tôi muốn hiển thị gradient phía sau chế độ xem bảng khi bạn cuộn. Vấn đề là khi phần khóa ở đầu bạn có thể thấy các ô phía sau phần. Tôi sẽ thiết lập màu nền phần nhưng nếu tôi làm điều đó nó không phù hợp với nền gradient xuyên tâm. Có anyway để có các tế bào clip dưới các phần trong khi vẫn giữ nền clearColor?Phần UITableView có nền clearColor?
Trả lời
nếu tôi hiểu nó, bạn muốn có một tableview hoàn toàn rõ ràng và ô xem bảng để bạn có thể nhìn thấy nền của bộ điều khiển xem của bạn.
Bạn có thể đạt được điều này bằng cách thiết lập tableview như không có nền
tableview.backgroundColor = [UIColor clearColor];
tableView.opaque = NO;
tableView.backgroundView = nil;
và cũng là tế bào
cell.backgroundColor = [UIColor clearColor]
nếu bạn cũng muốn phần được trong suốt, bạn có thể sử dụng phương pháp này:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
để tạo chế độ xem tùy chỉnh (ví dụ: tạo chế độ xem hình ảnh với transparen t .png cho nền)
Tôi hy vọng tôi hiểu câu hỏi của bạn một cách chính xác.
chỉnh sửa sau khi làm rõ
để cung cấp cho sự xuất hiện rằng các tế bào dừng lại trước khi đi bên dưới tiêu đề phần:
tạo ra một lớp đó là một lớp con của UITableView với Ivar này:
@interface CustomTableView : UITableView
{
CAGradientLayer* maskLayer;
}
rõ ràng điều này sẽ tạo ra độ dốc nhưng nếu bạn muốn, bạn có thể tinh chỉnh hoặc sử dụng CALayer
và thay vì tạo mặt nạ theo chương trình, hãy tạo tệp .png với chiều rộng/chiều cao chính xác của tiêu đề phần của bạn.
ANYWAY: nếu bạn sử dụng CAGradientLayer
:
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self)
{
[self setupGradients]; //call your method
}
return self;
}
- (void)setupGradients
{
[self addObserver:self forKeyPath:@"contentOffset" options:0 context:nil];
*/ ***** if you choose to use CALayer instead of CAGradient ****** */
//maskLayer = [[CALayer layer] retain];
//maskLayer.contents = (id) [UIImage imageNamed:@"maskLayer.png"].CGImage;
//maskLayer.backgroundColor = [UIColor clearColor].CGColor;
*/ ***** if you choose to use CALayer instead of CAGradient ****** */
maskLayer = [[CAGradientLayer layer] retain];
CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor;
CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor;
maskLayer.colors = [NSArray arrayWithObjects:(id)outerColor,
(id)innerColor, (id)innerColor, (id)outerColor, nil];
maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:1.0], nil]; //this creates a gradient effect. Tweak these numbers for a hard line.
maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
maskLayer.anchorPoint = CGPointZero;
self.layer.mask = maskLayer;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
[CATransaction begin];
[CATransaction setDisableActions:YES];
maskLayer.position = CGPointMake(0, self.contentOffset.y);
[CATransaction commit];
}
sau đó trong bộ điều khiển xem của bạn:
CustomTableView *_tableView; //ivar
_tableView = [[CustomTableView alloc] initWithFrame:YOUR_FRAME];
Ý tưởng cơ bản là một chiếc mặt nạ, bạn tạo một hình dạng mặt nạ trên đỉnh của tableview của bạn có cùng kích thước với tiêu đề phần của bạn. nó sẽ xuất hiện rằng các tế bào "biến mất" đằng sau nó. Đó là một chút khó khăn, nhưng nó sẽ làm việc.
Bạn đang hiểu những gì tôi đang cố gắng đạt được nhưng không phải là vấn đề tôi đang gặp phải. Vấn đề là các phần của tôi trong suốt nên bạn có thể thấy các ô khi chúng vượt qua phần sau. Điều này tạo ra một kết hợp của các tế bào và phần trông khủng khiếp. Tôi đánh giá cao câu trả lời mặc dù, nhờ – Bobbake4
ah tôi hiểu bây giờ. Câu hỏi thú vị. Tôi có một ý tưởng về cách bạn có thể làm điều đó, nhưng đó là một chút hacky. Tôi sẽ chỉnh sửa câu trả lời của mình ở trên. – sixstatesaway
Cách đơn giản để có tiêu đề phần trong suốt mà không cần tạo chế độ xem tiêu đề của riêng bạn.
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) {
UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view;
headerView.contentView.backgroundColor = [UIColor clearColor];
headerView.backgroundView.backgroundColor = [UIColor clearColor];
}
}
Đoạn mã này làm việc hoàn toàn tốt đẹp trong iOS 7.
EDIT Tôi biết đây là một chút muộn, nhưng cùng với điều này, bạn cần phải thêm 2 dây chuyền đảm bảo màu nền (và màu nền của chế độ xem nền?) của uitableview cũng rõ ràng.
tableView.backgroundColor = [UIColor clearColor];
tableView.backgroundView.backgroundColor = [UIColor clearColor];
Hoàn hảo! nó làm việc cho tôi. Cảm ơn nhiều –
- 1. Nền phần UITableView?
- 2. Đặt hình nền thành uitableview?
- 3. Hình nền cuộn cho UITableView?
- 4. iPhone UITableView nền cố định
- 5. UITableView indexPath phần luận lý
- 6. Tải lại phần UITableView
- 7. UITableView Với nhiều phần
- 8. iPhone UITableView Phần
- 9. UITableView sắp xếp lại nền ẩn
- 10. Tiêu đề phần UITableView iOS 5
- 11. iOS: Màu nền - UITableView và Phụ kiện có cùng màu nền
- 12. Cách căn giữa tiêu đề phần của UITableView
- 13. UITableView Di chuyển đến phần
- 14. UITableView với các ô tĩnh không có cellForRowAtIndexPath. Làm thế nào để thiết lập nền tảng rõ ràng?
- 15. Tiêu đề phần tùy chỉnh UITableView, vấn đề trùng lặp
- 16. Xóa các phần không có hàng từ UITableView
- 17. Tải lại dữ liệu của UITableView ở chế độ nền
- 18. Ẩn UITableView khi searchResultsTableXem hiển thị
- 19. UITableView: xóa phần với hình ảnh động
- 20. iPhone UITableView nền hình ảnh khi bảng trống
- 21. Thay đổi nền của UITableView được nhóm theo số
- 22. Set màu nền trên UITableView trong IOS 6
- 23. Tùy chỉnh phông chữ/màu nền của thanh chỉ mục/nền trong UITableView
- 24. Có gì với [UITableView reloadData]?
- 25. Kết cấu nền của UITableView được nhóm sẽ không cuộn với bảng
- 26. UITableView, làm cách nào để biết Phần nào trong cellForRowAtIndexPath?
- 27. Tiêu đề phần UITableView là tất cả màu đen
- 28. Chèn phần UITableView ở trên cùng trong khi cuộn
- 29. Thay đổi màu của phần tiêu đề trong UITableview
- 30. Nhận phần được ghim hiện tại của UITableView
bạn có thể đăng ảnh chụp màn hình không? Có một thời gian khó hình dung điều này. –
Bạn có thể đặt tableview.backgroundColor = [UIColor clearColor]; – kamleshwar