Закрытый UITableView
метод экземпляра _spacingForExtraSeparators
возвращает высоту строк-заполнителей. Если вы не пишете приложение для App Store, просто переопределите это. Возвращает CGFloat.
Вот другой подход, который совместим с App Store (насколько я знаю) и может быть проще, чем создание фиктивной строки.
UITableView
часто отправляет себе сообщение layoutSubviews
. Он делает это всякий раз, когда добавляет, удаляет или переставляет ячейки, и всякий раз, когда он прокручивает (и, вероятно, также в другое время). Итак, давайте переопределим layoutSubviews
, чтобы нарисовать представление, которое начинается у нижнего края последнего раздела вашего табличного представления. Представление будет заполнено повторяющимся узором, который выглядит как ячейки-заполнители с заданной высотой.
Создать подкласс UITableView
. Дайте вашему подклассу UIView *_bottomView
переменную экземпляра. Нам нужно переопределить layoutSubviews
, поэтому мы будем лениво инициализировать _bottomView
в этом методе.
@implementation MyTableView
{
UIView *_bottomView;
}
Переопределить layoutSubviews
. Первое, что вы делаете в своем layoutSubviews
, это звоните [super layoutSubviews]
, поэтому вы продолжите вести себя как настоящий UITableView
.
- (void)layoutSubviews
{
[super layoutSubviews];
Следующее, что вы делаете, это ленивая инициализация _bottomView
.
if (!_bottomView) {
Вам нужен шаблон для заполнения _bottomView
, и он должен выглядеть как заполнитель ячеек. Создайте контекст изображения шириной 1 пиксель и такого размера, какой вы хотите, чтобы была ячейка-заполнитель. Заполните контекст белым и нарисуйте разделительную линию (на самом деле пиксель) внизу. Получить изображение из контекста.
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();
Затем создайте _bottomView
, установите его цвет фона для этого изображения в качестве повторяющегося узора и добавьте его себе в качестве подпредставления.
_bottomView = [[UIView alloc] initWithFrame:CGRectZero];
_bottomView.opaque = YES;
_bottomView.backgroundColor = [UIColor colorWithPatternImage:image];
[self addSubview:_bottomView];
} // end of if-block
Наконец, найдите прямоугольник вашего последнего раздела. Используйте этот прямоугольник, чтобы вычислить кадр для _bottomView
, который начинается в нижней части последнего раздела, достаточно высокий (вдвое больше вашего собственного роста - более чем достаточно) и такой же ширины, как и прямоугольник последнего раздела.
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;
Наконец, убедитесь, что _bottomView
является вашим передним подпредставлением, поэтому оно заменит ячейки UITableView
.
[self bringSubviewToFront:_bottomView];
} // end of layoutSubviews
Конец.
@end