Цвет области отказов в UITableView: сверху и снизу [дубликат]

, если вы читаете немного дальше: «Конечно, на сервере есть потоки и процессы для доступа к БД и выполнения процесса. Однако они явно не подвержены действию вашего кода, поэтому вы не можете беспокоиться о них другим чем, зная, что взаимодействия ввода-вывода, например, с базой данных или с другими процессами, будут асинхронными с точки зрения каждого запроса, поскольку результаты этих потоков возвращаются через цикл событий в ваш код ».

about - «все работает параллельно, кроме вашего кода» - ваш код выполняется синхронно, всякий раз, когда вы вызываете асинхронную операцию, такую ​​как ожидание ввода-вывода, цикл событий обрабатывает все и вызывает обратный вызов. это просто не то, о чем вам нужно подумать.

в вашем примере: есть два запроса A (на первом месте) и B. вы выполняете запрос A, ваш код продолжает работать синхронно и выполняет запрос B. event loop обрабатывает запрос A, когда он заканчивается, он вызывает обратный вызов запроса A с результатом, то же самое относится к запросу B.

45
задан T . 29 August 2014 в 10:26
поделиться

15 ответов

Начиная с iOS 7, вы можете изменить это, изменив представление в виде таблицы.

[self.tableView setBackgroundView:view];

сделать цвет фона представления таким же, как цвет вашего родительского представления.

18
ответ дан HusseinB 26 August 2018 в 09:38
поделиться

EASIEST SOLUTION

Самый простой способ создать разные цвета в нижней части и в верхней части области перегиба табличного представления - это установить таблицу tableHeaderBackgroundColor таблицы. Таким образом вы устанавливаете верхний цвет. Я не уверен, но, возможно, есть еще один ключ для нижнего колонтитула, взгляните. Если вы ничего не нашли, вам просто нужно установить фон в виде таблицы с цветом, который вы хотите показать внизу. Выше вы можете увидеть пример кода:

self.table.setValue(UIColor.blue , forKey: "tableHeaderBackgroundColor")

Надеюсь, он вам поможет. Если да, пусть другие люди знают об этом легком пути, давая ответ в ответ:)

2
ответ дан Alcivanio 26 August 2018 в 09:38
поделиться

Продолжить на предложение Хусейна :

Swift 3

let bgView = UIView()
bgView.backgroundColor = UIColor.white
self.tableView.backgroundView = bgView

Цель C

UIView *bgView = [UIView new];
bgView.backgroundColor = [UIColor whiteColor];
[self.tableView setBackgroundView:bgView];
15
ответ дан Community 26 August 2018 в 09:38
поделиться

Этот код работает в Swift fot UITableView:

var frame = self.tableView.bounds
frame.origin.y = -frame.size.height
frame.size.height = frame.size.height
frame.size.width = UIScreen.mainScreen().bounds.size.width
let blueView = UIView(frame: frame)
blueView.backgroundColor = UIColor.headerBlueColor()
self.tableView.addSubview(blueView)
6
ответ дан Danny 26 August 2018 в 09:38
поделиться

Настройка прозрачности плохо для производительности. То, что вы хотите, - это серая область над панелью поиска, но она должна оставаться белой за пределами списка.

Вы можете добавить subview к вашему UITableView, который живет выше содержимого.

CGRect frame = self.list.bounds;
frame.origin.y = -frame.size.height;
UIView* grayView = [[UIView alloc] initWithFrame:frame];
grayView.backgroundColor = [UIColor grayColor];
[self.listView addSubview:grayView];
[grayView release];

Вы могли бы добавить более интересные вещи в представление, если хотите, возможно, затухание или разделительную линию без подкласса UISearchBar.

38
ответ дан gcamp 26 August 2018 в 09:38
поделиться

Если вы используете tableviewcell, вы можете установить, что фон представления непрозрачен белым. Затем используйте

self.tableView.backgroundColor = [UIColor grayColor];

в режиме загрузки.

0
ответ дан Jonah 26 August 2018 в 09:38
поделиться

Это один из моих самых любимых трюков.

UIView *topview = [[[UIView alloc] initWithFrame:CGRectMake(0,-480,320,480)] autorelease];
topview.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:238.0/255.0 alpha:1];

[self.tableView addSubview:topview];

В основном вы создаете большой вид размера экрана и помещаете его «выше» в область содержимого. Вы никогда не сможете прокручивать его мимо.

И не беспокойтесь о влиянии UIView на память на 320x480 пикселей, он не будет потреблять значительную память, потому что у CALayer нет любое содержательное содержание.

ПРИМЕЧАНИЕ. Почему этот ответ имеет значение, когда «принятый» ответ намного проще? Почему бы просто не установить backgroundView в виде таблицы? Это связано с тем, что в случае приложения «Контакты», как показано в исходном вопросе, область «выше» в виде таблицы имеет другой цвет фона (голубой), чем область «ниже» в виде таблицы (белый). Этот метод позволяет вам иметь два разных цвета над и под табличным представлением, которые не могут быть выполнены простым фоном.

EDIT 1/2018: Как сказал Том в комментариях, этот ответ довольно старый и предполагает, что все устройства iOS имеют одинаковый размер экрана (кажется сумасшедшим, но это было в 2009 году, когда я ответил на это). Концепция, представленная здесь, по-прежнему работает, но вы должны использовать UIScreen.main.bounds для определения размера экрана actual , или вы можете попасть в некоторые причудливые макеты (рекомендуется приветствовать). Я не рекомендую использовать tableView.bounds как в другом ответе, потому что, как правило, в viewDidLoad размер ваших представлений не обязательно такой размер, который они будут после того, как контроллер изменяет их размеры. Иногда они начинаются как 0x0!

25
ответ дан Nick Farina 26 August 2018 в 09:38
поделиться

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

frame.origin.y = -frame.size.height - 1
0
ответ дан petert 26 August 2018 в 09:38
поделиться

Я не думаю, что вы хотите переопределить drawRect. Скорее всего, то, что вы видите, это цвет фона другого вида или окна, которое находится «за» (т. Е. Является просмотром) представления таблицы. В пользовательских интерфейсах пользовательского интерфейса Apple обычно существует довольно сложный уровень UIViews. Изучите иерархию представлений в GDB, посмотрите на [myView superview], а затем на subviews [someSuperView] и попробуйте манипулировать их цветами BG в отладчике, чтобы узнать, можете ли вы найти, какой из них он есть. Однако, если вы реализуете исправление таким образом, будьте предупреждены о том, что он не может быть совместим с будущим.

Вы также можете попробовать установить цвет BG одного из представлений за табличным представлением в Interface Builder (или самого окна).

1
ответ дан Simon Woodside 26 August 2018 в 09:38
поделиться

Для тех, кто задается вопросом, как сделать то же самое для нижней области отскока:

Сначала добавьте subview с желаемым фоновым цветом в фоновый вид вашего табличного представления:

self.bottomView = [[UIView alloc] initWithFrame:CGRectOffset(self.tableView.frame, 0, self.tableView.frame.size.height)];
self.bottomView.backgroundColor = whateverColorYouLike;

[self.tableView.backgroundView addSubview:self.bottomView];

И затем в делегате вашего табличного представления:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect frame = self.bottomView.frame;
    frame.origin.y = self.tableView.contentSize.height - self.tableView.contentOffset.y;
    self.bottomView.frame = frame;
}
0
ответ дан soheilpro 26 August 2018 в 09:38
поделиться

Я сам столкнулся с этой проблемой и нашел решение.

Причина

Я использовал Spark Inspector для изучения макета табличного представления - который

Дело в том, что в этом случае UITableView имеет 3 подзаголовка:

  1. UITableViewWrapperView
  2. UIView - С backgroundColor установлен на светло-серый цвет
  3. UISearchBar

Пока вы просматриваете содержимое таблицы вниз, вторая высота подзадачи динамически увеличивается, чтобы заполнить пространство между UITableViewWrapperView и начало кадра UITableView.

Решение

Установка свойства backgroundColor или backgroundView не повлияет на 2-й под просмотр. Что вам нужно сделать, это найти второе представление и изменить его цвет, например:

if (_tableView.subviews.count > 1) {
    _tableView.subviews[1].backgroundColor = THE_TARGET_COLOR;
}

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

for (UIView *subview in _tableView.subviews) {
    subview.backgroundColor = [UIColor whiteColor];
}
4
ответ дан Tom Susel 26 August 2018 в 09:38
поделиться

Я уверен, что это [UITableView backgroundColor]. Вы затронули строки, потому что строки имеют backgroundColor == clear (или полупрозрачные). Итак, если вы сделаете строки непрозрачными, все будет работать нормально. Это будет решение.

0
ответ дан tt.Kilew 26 August 2018 в 09:38
поделиться

Я нашел только один способ сделать это. Вы должны установить, что backgroundColor UITableView будет прозрачным, установите для backgroundColor контент-контента ячейки какой-либо цвет, который вы хотите для фактических ячеек, а затем важно, чтобы светлый серый цвет отображался за UITableView. Этот последний шаг вы можете сделать, установив backgroundColour из UIWindow или того, что содержится или ваш tableViewController.

Итак, если у вас есть контроллер вида, который получен из UITableViewController, вставьте эти строки в - (void) viewDidLoad метод: -

// sets the background of the table to be transparent
self.tableView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.0];
// assuming we are inside a navigation or tab controller, set the background
self.parentViewController.view.backgroundColor = [UIColor lightGrayColor];

Затем внутри части таблицыView: cellForRowAtIndexPath: создает новые ячейки, добавляет: -

// set an opaque background for the cells 
cell.contentView.backgroundColor = [UIColor whiteColor];
4
ответ дан U62 26 August 2018 в 09:38
поделиться

В Swift (проверено на iOS9)

    let backView = UIView(frame: self.tableView.bounds)
    backView.backgroundColor = UIColor.clearColor() // or whatever color
    self.tableView.backgroundView = backView
6
ответ дан user 26 August 2018 в 09:38
поделиться

Я дам вам лучший способ сделать это. Сначала установите цвет фона в виде таблицы так, как вы хотите, в построителе интерфейса. Затем ответьте на метод UITableView delegate tableView:willDisplayCell:ForIndexPath:, подобный этому

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCelll*)cell forIndexPath:(NSINdexPath*)indexPath
{
     [cell setBackgroundColor:[UIColor whiteColor]];
}

. Другой метод: в методе ViewDidLoad (или где угодно) установите цвет фона tableView, чтобы очистить цвет следующим образом:

self.tableView.backgroundColor = [UIColor clearColor];

, а затем установите цвет супервизора в белый цвет

self.tableView.superview.backgroundColor = [UIColor whiteColor];
3
ответ дан William Denniss 26 August 2018 в 09:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: