Các tin UITableView
phương pháp dụ _spacingForExtraSeparators
trả về chiều cao của các hàng giữ chỗ. Nếu bạn không viết một ứng dụng cho App Store, chỉ cần ghi đè lên đó. Nó trả về một CGFloat.
Dưới đây là một cách tiếp cận khác là tuân thủ App Store (theo như tôi biết) và có thể dễ dàng hơn việc tạo hàng giả.
UITableView
tự gửi thông báo layoutSubviews
nhiều. Nó thực hiện điều này bất cứ khi nào nó thêm, xóa hoặc sắp xếp lại các ô và bất cứ khi nào nó cuộn (và có thể cả các lần khác nữa). Vì vậy, hãy ghi đè layoutSubviews
để vẽ chế độ xem bắt đầu ở cạnh dưới cùng của phần cuối cùng của chế độ xem bảng. Chế độ xem sẽ được điền bằng mẫu lặp lại trông giống như các ô giữ chỗ, với chiều cao bạn xác định.
Tạo lớp con của UITableView
. Cung cấp cho lớp con của bạn biến số phiên bản UIView *_bottomView
. Chúng tôi cần ghi đè layoutSubviews
, vì vậy, chúng tôi sẽ khởi tạo _bottomView
một cách lười biếng trong phương thức đó.
@implementation MyTableView
{
UIView *_bottomView;
}
Ghi đè layoutSubviews
. Việc đầu tiên bạn thực hiện trong số layoutSubviews
của bạn là gọi số [super layoutSubviews]
để bạn sẽ tiếp tục hành động như một số UITableView
thích hợp.
- (void)layoutSubviews
{
[super layoutSubviews];
Điều tiếp theo bạn cần làm là khởi động lazily _bottomView
.
if (!_bottomView) {
Bạn cần mẫu để điền _bottomView
và cần phải giống như ô giữ chỗ. Tạo một ngữ cảnh hình ảnh rộng 1 pixel và cao bằng cách bạn muốn một ô giữ chỗ. Điền vào các bối cảnh với màu trắng, và vẽ một đường phân cách (pixel, thực sự) ở phía dưới. Lấy hình ảnh từ ngữ cảnh.
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, placeholderHeight), YES, 0);
[[UIColor whiteColor] setFill];
UIRectFill(CGRectMake(0, 0, 1, placeholderHeight));
[self.separatorColor setFill];
UIRectFill(CGRectMake(0, placeholderHeight - 1, 1, 1));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Tiếp theo, tạo nền "màu" cho hình ảnh đó làm mẫu lặp lại và thêm màu đó vào chính bạn làm tiểu sử.
_bottomView = [[UIView alloc] initWithFrame:CGRectZero];
_bottomView.opaque = YES;
_bottomView.backgroundColor = [UIColor colorWithPatternImage:image];
[self addSubview:_bottomView];
} // end of if-block
Cuối cùng, tìm phần cuối của phần cuối cùng của bạn. Sử dụng điều đó để tính toán một khung cho _bottomView
bắt đầu ở dưới cùng của phần cuối cùng, là rất nhiều cao (hai lần chiều cao của riêng bạn là quá đủ), và là rộng như rect cuối cùng của phần.
int lastSectionIndex = [self.dataSource numberOfSectionsInTableView:self] - 1;
if (lastSectionIndex < 0)
lastSectionIndex = 0;
CGRect lastSectionRect = [self rectForSection:lastSectionIndex];
CGRect bottomViewFrame = CGRectMake(lastSectionRect.origin.x, CGRectGetMaxY(lastSectionRect), lastSectionRect.size.width, self.bounds.size.height * 2);
_bottomView.frame = bottomViewFrame;
Cuối cùng, hãy chắc chắn _bottomView
là subview frontmost của bạn vì vậy nó sẽ viết chi phiếu quá UITableView
's các tế bào giữ chỗ.
[self bringSubviewToFront:_bottomView];
} // end of layoutSubviews
Kết thúc.
@end
Không có hàng nào ngoài hàng cuối cùng trong TableView (trừ khi tôi hiểu nhầm từ * last *). – PengOne
@PengOne Tôi đang đề cập đến các hàng giữ chỗ ở đó khi số lượng mục nhỏ hơn số hàng mà TableView có thể chứa. – pixelfreak
thay đổi kích thước bảng chiều cao khung nhìn để ẩn các hàng giữ chỗ? – changx