Фоновая текстура сгруппированного UITableView не будет прокручиваться вместе с таблицей - PullRequest
6 голосов
/ 22 декабря 2011

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

Проблема, с которой я сталкиваюсь, заключается в том, что при использовании стиля «Группировка» фоновая текстура не прокручивается вместе с таблицей; она остается на месте, пока таблица прокручивается над ней. Я чувствую, что это немного странно, и я предпочел бы иметь фоновую прокрутку с таблицей, как это происходит в обычном стиле. К сожалению, из-за того, что я не могу иметь представления заголовков, плавающие поверх всего, это не представляется возможным.

Кто-нибудь смог это сделать?

Вот соответствующий код:

- (void)loadView {
    [super loadView];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"texturedPattern.png"]];
    // this prevents the cells from replicating the background texture
    self.tableView.backgroundView = [[UIView alloc] initWithFrame:self.view.bounds];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    // disable the default grouped border since we're doing it manually with the textField
    cell.backgroundView = nil;
    cell.backgroundColor = [UIColor clearColor];
}

И мой табличный вид в настоящее время выглядит так: Just to give you an idea...

UPDATE

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

  • Во-первых, фон всегда виден. Я убрал цвет фона из таблицы, чтобы сделать его более очевидным :

Scrolling areas vs. non-scrolling areas

Везде, где вы видите черный цвет, будет видна фоновая текстура tableView, и она не будет прокручиваться вместе с tableView . Стиль сгруппированного табличного представления вставляет 5-пиксельную границу с каждой стороны каждой ячейки и не может быть изменен. Кроме того, под разделом «Идентификатор персонала» нет нижнего колонтитула, и я даже добавил -tableView:heightForFooterInSection:, чтобы вернуть 0.0, но там все еще есть пробел.

  • Во-вторых, даже если бы мне удалось избавиться от этих пробелов, текстуры все равно не совпадают. Опять же, это трудно увидеть, поэтому я загрузил снимок экрана сетчатки, чтобы сделать его немного проще:

if you squint, you'll see a totally rad 3d image!

Это наиболее очевидно выше раздела «Пароль», вы можете видеть, что текстуры не выровнены должным образом, и это выглядит как «сгиб» на бумаге. Что было бы здорово, я думаю, если это то, что хотел клиент. Это видно, но менее очевидно почти на каждом краю со второго снимка экрана. Это связано с тем, что текстура на самом деле довольно большая: 200x200 (400x400 @ 2x), и есть небольшие вариации цвета, которые не заметны , если не произойдет такого смещения.

1 Ответ

0 голосов
/ 06 января 2012

Сначала замените ваш UITableViewController на UIViewController и добавьте к нему UITableView. Установите autoresizingMask для гибкой ширины / высоты. Теперь у вас есть нечто, эквивалентное UITableViewController, но с большим контролем над иерархией представления.

Затем добавьте представление под табличным представлением (фактически: сначала добавьте это), которое содержит фон.

Наконец, установите делегат scrollview для вашего класса и отвечайте на события прокрутки, соответственно обновляя фоновое представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...