Подтвердить что ты не робот

Различные цвета фона для верхней и нижней части UITableView

Если вы посмотрите на свою папку "Входящие" в приложении iPhone OS 3.0 Mail, вы увидите, что прокрутка вниз показывает серый цвет фона над UISearchBar.

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

Я могу придумать пару способов решения этой проблемы, но они довольно хаки:

  • Измените цвет фона в виде таблицы в зависимости от текущего scrollOffset, переопределив -scrollViewDidScroll:
  • Дайте UITableView прозрачный цвет фона, а затем установите его суперэкран backgroundColor на изображение с градиентным рисунком.

Кто-нибудь знает, что такое "лучшая практика" для этой проблемы? спасибо.

4b9b3361

Ответ 1

Самый простой и легкий способ решить эту проблему:

  • Установите цвет фона в виде таблицы в любом месте - в вашем случае белый.
  • Поместите представление панели поиска в представление контейнера. Установите представление заголовка таблицы в этот вид контейнера (вместо самого представления панели поиска, что, вероятно, было тем, что вы делали ранее).
  • В этом представлении контейнера добавьте другое подвью с фреймом, равным прямоугольному (0, -480, 320, 480), и установите цвет фона этого подсмотра на любой цвет, который вам нужен - в вашем случае, сероватый.

Это должно быть все, что вам нужно. Я просто сделал это сам и достиг желаемого вида, точно так же, как приложение Mail. Использование scrollViewDidScroll - основная трата ресурсов процессора, а подклассификация UITableView очень беспорядочна, IMO.

Ответ 2

Хорошие ответы на Светло-серый фон в области "отскок" ...

Где я нашел этот codenipet (слегка измененный), который отлично работает:

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

Ответ 3

Установите tableFooterView в виде 0 высоты и ширины, которые выходят за пределы его границ. Простым способом является добавление к нему большого представления:

self.tableView.tableFooterView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
UIView *bigFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1000)];
bigFooterView.backgroundColor = [UIColor whiteColor];
bigFooterView.opaque = YES;
[self.tableView.tableFooterView addSubview:bigFooterView];
[bigFooterView release];

отрегулируйте [UIColor whiteColor] и ширину вашего bigFooterView соответственно (если ваш TableView может идти горизонтально, вы хотите, чтобы он был шире 320). Таким образом, наверху вы увидите все, что есть в вашем представлении на столе, а внизу - все, что вы установили для этого фона представления.

Ответ 4

Предоставлено Эрикой Садун:

- (void) scrollViewDidScroll: (UIScrollView *) sv
{
    float percent =  sv.contentOffset.y / sv.contentSize.height;
    percent = 0.5 + (MAX(MIN(1.0f, percent), 0.0f) / 2.0f);

    sv.backgroundColor = [UIColor colorWithRed:percent * 0.20392
                                         green:percent * 0.19607
                                          blue:percent * 0.61176 alpha: 1.0f];
}

а затем здесь измененная версия, которую я использую:

- (void)scrollViewDidScroll:(UIScrollView *)sv
{
        UIColor *backgroundColor = nil;

        float percent = sv.contentOffset.y / sv.contentSize.height;
        percent = 0.5 + (MAX(MIN(1.0f, percent), 0.0f) / 2.0f);

        if (0.5f == percent)
        {
            backgroundColor = RGBCOLOR(233.0f, 235.0f, 237.0f);
        }
        else
        {
            CGFloat r = 233.0f * (1.0f - percent) + 255.0f * percent;
            CGFloat g = 235.0f * (1.0f - percent) + 255.0f * percent;
            CGFloat b = 237.0f * (1.0f - percent) + 255.0f * percent;
            backgroundColor = RGBCOLOR(r,g,b);
        }           
        sv.backgroundColor = backgroundColor;
}

Ответ 5

Вот версия Swift 3:

var frame = self.tableView.bounds
frame.origin.y = -frame.size.height
let view = UIView(frame: frame)
view.backgroundColor = .gray
self.tableView.addSubview(view)

Ответ 6

Это не может быть "лучшей практикой", но если вы действительно хотите сделать это, как Apple, есть частное свойство UITableView, называемое tableHeaderBackgroundColor. Сероватый цвет #e2e7ed.

В -viewDidLoad метод UITableViewController можно добавить что-то вроде этого:

UIColor *grayishColor = [UIColor colorWithRed:226/255.0
                                        green:231/255.0
                                         blue:237/255.0 alpha:1.0];
[self.tableView setValue:grayishColor forKey:@"tableHeaderBackgroundColor"];

Ответ 7

Я расширил ответ в Светло-серый фон в области "отскока" UITableView до нижней части. Надеюсь, это поможет:)

CGRect topFrame = self.tableView.bounds;
topFrame.origin.y = -topFrame.size.height;
UIView* topView = [[UIView alloc] initWithFrame:topFrame];
topView.backgroundColor = [UIColor grayColor]; // change to any color you want
[self.tableView addSubview:topView];

CGRect bottomFrame = self.tableView.bounds;
bottomFrame.origin.y = self.tableView.contentSize.height;
UIView* bottomView = [[UIView alloc] initWithFrame:bottomFrame];
bottomView.backgroundColor = [UIColor grayColor]; // change to any color you want
[self.tableView addSubview:bottomView];

Ответ 8

Вы должны изучить свойства tableHeaderView и tableFooterView UITableView.

Ответ 9

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