Прозрачная строка пикселей между заголовком раздела и первой ячейкой в ​​сгруппированном UITableView - PullRequest
9 голосов
/ 28 апреля 2011

Как видно из названия, у меня проблема с рядом прозрачных пикселей, от которых я не могу избавиться.
Я прикрепил изображение, так как оно стоит 1000 слов.

http://oi54.tinypic.com/288ahy.jpg

Проблема отсутствует для нижнего колонтитула раздела (где я также использую пользовательский вид).Я проверил и дважды проверил, что я возвращаю правильный размер для высоты секции.

Есть идеи?

РЕДАКТИРОВАТЬ:
Я добавил тестовый проект, чтобы вы могли поиграть.Фиолетовый цвет представляет цвет фона.Белые прямоугольники - это верхний и нижний колонтитулы, а светло-серый - это несколько фиктивных ячеек.Вопрос хорошо виден в проекте.

Проект TransparentRowBug XCode

Вы также увидите, что я использую много чистых цветов.К сожалению, изменение цвета, чтобы скрыть проблему, не является для меня жизнеспособным решением.

Не стесняйтесь попробовать (или даже больше)!

Большое спасибо!

EDIT2:
После дальнейшего изучения я пришел к выводу, что линия пикселей идет от разделителя табличного представления.В тестовом проекте я устанавливаю разделительColor, чтобы очиститьColor.Если я изменю это на другой цвет, я получу именно этот ряд пикселей в новом цвете.Несмотря на то, что я установил стиль разделителя в none, он не влияет на сгруппированные таблицы.

Ответы [ 5 ]

11 голосов
/ 29 апреля 2011

Я наконец понял это после почти 2 дней тестирования (и выпадения волос).

Как я уже говорил в моем комментарии выше, простой возврат меньшей высоты в методе heightForHeader не работает. Чтобы заставить его работать, вам нужно взять желаемый вид заголовка, вставить его в представление фиктивного / контейнера с точно таким же размером, а затем передать этот контейнер tableView в качестве заголовка.

Затем, когда вы возвращаете заголовок меньшего размера, он волшебным образом (и для меня это действительно волшебство) удается перекрыть этот раздражающий ряд пикселей.

Кстати, я пришел к выводу, что ряд пикселей связан с разделительной линией ячеек.

Если кому-то интересно, я могу снова загрузить рабочий тестовый проект.

0 голосов
/ 11 августа 2014

Сгруппированный UITableView будет принимать заголовок, ячейку и нижний колонтитул как единый объект. Таким образом, белый прозрачный вид - это вид нижнего колонтитула, который можно уменьшить, уменьшив высоту нижнего колонтитула, как показано на скриншоте. надеюсь это работает Удачи:)

0 голосов
/ 01 апреля 2014

Добавьте разделитель между представлением заголовка и первой строкой: - Для представления заголовка в методе делегата раздела добавьте подпредставление self.separator // @ property (nonatomic, strong) UIImageView * separator;

- (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {

return 41; 
}


- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {

self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR];

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]];
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1);
[self.headerView addSubview:self.separator];
return self.headerView;

}
0 голосов
/ 26 ноября 2013

Я тоже столкнулся с этой проблемой. У меня был UITableView с сгруппированными разделами. Между заголовком первого раздела и первой ячейкой был промежуток в 1 пункт (2 пикселя Retina), через который проходил фон.

Если фоновый цвет ячейки однородный, вы можете назначить backgroundColor UITableView, чтобы скрыть этот пробел.

В моем случае backgroundColor / backgroundView использовался для не прокручиваемого узорного фона в других ячейках. Решение, предложенное mluisbrown, работает отлично. Я хотел бы еще раз подчеркнуть это решение:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
   UIView* topTabView = /* initialized elsewhere */;
   CGRect sectionHeaderSize = CGRectMake(0, 0, 320, 46);
   UIView* wrapperView = [[UIView alloc] initWithFrame:sectionHeaderSize];
   topTabView.frame = sectionHeaderSize;
   [wrapperView addSubview:topTabView];
   return wrapperView;
}
0 голосов
/ 29 апреля 2011

Я не уверен, что понимаю, если это то, что вы спрашиваете, но два дня назад я подумал, что вы можете уменьшить пространство по умолчанию между разделами в tableView ...

Сделав heightForHeader возврат отрицательное значение !Грязно, но ... работает.

Надеюсь, что поможет ...

...