Основано на ответе samvermette , но изменено для непосредственного использования фонового изображения вместо компоновки изображения из подкласса UITableViewCell. Ответ Сэма хорош, но он будет менее производительным, чем просто создание фонового изображения напрямую.
Создайте подкласс UIView - в этом примере я назвал его CustomTiledView - и добавьте следующий код в класс:
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"tableview_empty_cell_image"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM (context, 1, -1);
CGContextDrawTiledImage(context,
CGRectMake(0, 0, rect.size.width, image.size.height),
[image CGImage]);
}
Добавьте следующий код в ваш tableviewcontroller:
- (CGFloat)tableView:(UITableView *)tableView
heightForFooterInSection:(NSInteger)section {
// this can be any size, but it should be 1) multiple of the
// background image height so the last empty cell drawn
// is not cut off, 2) tall enough that footer cells
// cover the entire tableview height when the tableview
// is empty, 3) tall enough that pulling up on an empty
// tableview does not reveal the background.
return BACKGROUND_IMAGE_HEIGHT * 9; // create 9 empty cells
}
- (UIView *)tableView:(UITableView *)tableView
viewForFooterInSection:(NSInteger)section {
CustomTiledView *footerView = [[CustomTiledView alloc] init];
return [footerView autorelease];
}
Наконец, вам нужно установить нижнюю вставку содержимого вашего табличного представления в отрицательное значение, возвращаемое из -tableView:heightForFooterInsection:
В этом примере это будет -1*BACKGROUND_IMAGE_HEIGHT*9
. Вы можете установить нижнюю вставку содержимого либо из Инспектора размеров Интерфейсного Разработчика, либо установив свойство self.tableView.contentInset
из tableviewcontroller.
ура!