Светло-серый фон в “области возврата” UITableView

подробно останавливаясь "dict как переключатель" идея. если Вы хотите использовать значение по умолчанию для своего переключателя:

def f(x):
    try:
        return {
            'a': 1,
            'b': 2,
        }[x]
    except KeyError:
        return 'default'
51
задан T . 28 August 2014 в 22:26
поделиться

7 ответов

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

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

1
ответ дан 7 November 2019 в 09:50
поделиться

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

self.tableView.backgroundColor = [UIColor grayColor];

в представлении метода загрузки.

0
ответ дан 7 November 2019 в 09:50
поделиться

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

0
ответ дан 7 November 2019 в 09:50
поделиться

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

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

// 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];

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

// set an opaque background for the cells 
cell.contentView.backgroundColor = [UIColor whiteColor];
4
ответ дан 7 November 2019 в 09:50
поделиться

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

Вы можете добавить подпредставление в свой UITableView , которое вместо этого находится над содержимым.

12103] При желании вы можете добавить к представлению более причудливые элементы, например, переход или разделительную линию без подкласса UISearchBar .

38
ответ дан 7 November 2019 в 09:50
поделиться

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

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 в виде таблицы? Это потому, что в случае приложения «Контакты», как показано в исходном вопросе, область «над» табличным представлением имеет другой цвет фона (голубой), чем область «под» табличным представлением ( белый). Этот метод позволяет вам иметь два разных цвета над и под табличным представлением, что не может быть выполнено с помощью простого фона.

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

30
ответ дан 7 November 2019 в 09:50
поделиться

Я последовал за наконечником, изложенным Puylow, для UileabeView, просто добавляя подсчет. Мои единственные изменения из кода было немного ближе к тому, что используемый в Apple Apps, плюс я получил немного ближе к внешности Apple наличие линейки над UISearchBar, уменьшив координатую рамы. Координата на одном пикселе:

frame.origin.y = -frame.size.height - 1
0
ответ дан 7 November 2019 в 09:50
поделиться
Другие вопросы по тегам:

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