При использовании
Проблема состоит в том что поменяв
Так что я создал подкласс
UITableView
в iOS приложениях достаточно часто возникает необходимость изменить его внешний вид. Как минимум – поменять цвет фона ячеек и цвет разделителей. И в общем это не проблема для UITableView
в виде списка, но немного нетривиально для группированного UITableView
.Проблема состоит в том что поменяв
backgroundColor
ячейки в группированном UITableView
результат будет отличаться от ожидаемого. Решение состоит в том чтоб изменить backgroundView
ячейки. Довольно часто с этой целью используются заранее отрисованые картинки и соответственно UIImageView
. Но этот способ довольно неудобен если нужно всего лишь поменять цвет фона и границ ячейки.Так что я создал подкласс
UIView
для повторного использования в качестве фона ячеек. Благодаря использованию UIBezierPath
его реализация тривиальна, вот практически весь код:- (void)drawRect:(CGRect)rect
{
CGRect bounds = CGRectInset(self.bounds,
0.5 / [UIScreen mainScreen].scale,
0.5 / [UIScreen mainScreen].scale);
UIBezierPath *path;
if (position == CellPositionSingle) {
path = [UIBezierPath bezierPathWithRoundedRect:bounds cornerRadius:kCornerRadius];
} else if (position == CellPositionTop) {
bounds.size.height += 1;
path = [UIBezierPath bezierPathWithRoundedRect:bounds
byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
cornerRadii:CGSizeMake(kCornerRadius, kCornerRadius)];
} else if (position == CellPositionBottom) {
path = [UIBezierPath bezierPathWithRoundedRect:bounds
byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
cornerRadii:CGSizeMake(kCornerRadius, kCornerRadius)];
} else {
bounds.size.height += 1;
path = [UIBezierPath bezierPathWithRect:bounds];
}
[self.fillColor setFill];
[self.borderColor setStroke];
[path fill];
[path stroke];
}