, если вы читаете немного дальше: «Конечно, на сервере есть потоки и процессы для доступа к БД и выполнения процесса. Однако они явно не подвержены действию вашего кода, поэтому вы не можете беспокоиться о них другим чем, зная, что взаимодействия ввода-вывода, например, с базой данных или с другими процессами, будут асинхронными с точки зрения каждого запроса, поскольку результаты этих потоков возвращаются через цикл событий в ваш код ».
about - «все работает параллельно, кроме вашего кода» - ваш код выполняется синхронно, всякий раз, когда вы вызываете асинхронную операцию, такую как ожидание ввода-вывода, цикл событий обрабатывает все и вызывает обратный вызов. это просто не то, о чем вам нужно подумать.
в вашем примере: есть два запроса A (на первом месте) и B. вы выполняете запрос A, ваш код продолжает работать синхронно и выполняет запрос B. event loop обрабатывает запрос A, когда он заканчивается, он вызывает обратный вызов запроса A с результатом, то же самое относится к запросу B.
Начиная с iOS 7, вы можете изменить это, изменив представление в виде таблицы.
[self.tableView setBackgroundView:view];
сделать цвет фона представления таким же, как цвет вашего родительского представления.
Самый простой способ создать разные цвета в нижней части и в верхней части области перегиба табличного представления - это установить таблицу tableHeaderBackgroundColor таблицы. Таким образом вы устанавливаете верхний цвет. Я не уверен, но, возможно, есть еще один ключ для нижнего колонтитула, взгляните. Если вы ничего не нашли, вам просто нужно установить фон в виде таблицы с цветом, который вы хотите показать внизу. Выше вы можете увидеть пример кода:
self.table.setValue(UIColor.blue , forKey: "tableHeaderBackgroundColor")
Надеюсь, он вам поможет. Если да, пусть другие люди знают об этом легком пути, давая ответ в ответ:)
Продолжить на предложение Хусейна :
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];
Этот код работает в 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)
Настройка прозрачности плохо для производительности. То, что вы хотите, - это серая область над панелью поиска, но она должна оставаться белой за пределами списка.
Вы можете добавить 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
.
Если вы используете tableviewcell, вы можете установить, что фон представления непрозрачен белым. Затем используйте
self.tableView.backgroundColor = [UIColor grayColor];
в режиме загрузки.
Это один из моих самых любимых трюков.
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!
Я следил за кончиком, обозначенным Peylow, для UITableView, просто добавив subview. Мое единственное изменение в коде заключалось в том, чтобы захватить цвет немного ближе к тому, который использовался в приложениях Apple, и я немного приблизился к тому, что Apple выглядела так, что линия над UISearchbar уменьшила координату начала координат y на один пиксель:
frame.origin.y = -frame.size.height - 1
Я не думаю, что вы хотите переопределить drawRect. Скорее всего, то, что вы видите, это цвет фона другого вида или окна, которое находится «за» (т. Е. Является просмотром) представления таблицы. В пользовательских интерфейсах пользовательского интерфейса Apple обычно существует довольно сложный уровень UIViews. Изучите иерархию представлений в GDB, посмотрите на [myView superview], а затем на subviews [someSuperView] и попробуйте манипулировать их цветами BG в отладчике, чтобы узнать, можете ли вы найти, какой из них он есть. Однако, если вы реализуете исправление таким образом, будьте предупреждены о том, что он не может быть совместим с будущим.
Вы также можете попробовать установить цвет BG одного из представлений за табличным представлением в Interface Builder (или самого окна).
Для тех, кто задается вопросом, как сделать то же самое для нижней области отскока:
Сначала добавьте 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;
}
Я сам столкнулся с этой проблемой и нашел решение.
Я использовал Spark Inspector для изучения макета табличного представления - который
Дело в том, что в этом случае UITableView имеет 3 подзаголовка:
UITableViewWrapperView
UIView
- С backgroundColor
установлен на светло-серый цвет 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];
}
Я уверен, что это [UITableView backgroundColor]. Вы затронули строки, потому что строки имеют backgroundColor == clear (или полупрозрачные). Итак, если вы сделаете строки непрозрачными, все будет работать нормально. Это будет решение.
Я нашел только один способ сделать это. Вы должны установить, что 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];
В Swift (проверено на iOS9)
let backView = UIView(frame: self.tableView.bounds)
backView.backgroundColor = UIColor.clearColor() // or whatever color
self.tableView.backgroundView = backView
Я дам вам лучший способ сделать это. Сначала установите цвет фона в виде таблицы так, как вы хотите, в построителе интерфейса. Затем ответьте на метод 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];