Цвет фона UIRefreshControl

Возможно ли, чтобы фон UIRefreshControl увеличивался по мере увеличения контроля?

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

Приложение Apple mail показывает это поведение. Фон управления обновлением соответствует серой строке поиска, но пустые ячейки в нижней части табличного представления по-прежнему являются нормальными белыми.

Вот пример скриншота о том, как выглядит таблица, показывающая уродливый белый цвет, который появляется в качестве элемента управления обновлением: enter image description here

Ответы

Ответ 1

Вам нужно создать представление с помощью bgColor и добавить его с отрицательным y-началом в tableView.

Внимание:

  • Вам нужно вставить этот вид в нижний стек подкадров tableView
  • Вы должны вставить это представление после установки refreshControll: self.refreshControl = refreshControl;

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

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Background Color
    UIColor *bgRefreshColor = [UIColor grayColor];

    // Creating refresh control
    refreshControl = [[UIRefreshControl alloc] init];
    [refreshControl addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged];
    [refreshControl setBackgroundColor:bgRefreshColor];
    self.refreshControl = refreshControl;

    // Creating view for extending background color
    CGRect frame = self.tableView.bounds;
    frame.origin.y = -frame.size.height;
    UIView* bgView = [[UIView alloc] initWithFrame:frame];
    bgView.backgroundColor = bgRefreshColor;
    bgView.autoresizingMask = UIViewAutoresizingFlexibleWidth;

    // Adding the view below the refresh control
    [self.tableView insertSubview:bgView atIndex:0]; // This has to be after self.refreshControl = refreshControl;
}

Ответ 2

Быстрая версия для упрощения копирования:)

Swift 2

func viewDidLoad() {
    super.viewDidLoad()

    // Background Color
    let backgroundColor = UIColor.grayColor()

    // Creating refresh control
    let refresh = UIRefreshControl()
    refresh!.backgroundColor = backgroundColor
    refresh!.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged)
    refreshControl = refresh

    // Creating view for extending background color
    var frame = tableView.bounds
    frame.origin.y = -frame.size.height
    let backgroundView = UIView(frame: frame)
    backgroundView.autoresizingMask = .FlexibleWidth
    backgroundView.backgroundColor = backgroundColor

    // Adding the view below the refresh control
    tableView.insertSubview(backgroundView, atIndex: 0) // This has to be after refreshControl = refresh
}

Swift 3

func viewDidLoad() {
    super.viewDidLoad()

    // Background Color
    let backgroundColor = .gray

    // Creating refresh control
    let refresh = UIRefreshControl()
    refresh!.backgroundColor = backgroundColor
    refresh!.addTarget(self, action: #selector(refresh), forControlEvents: .valueChanged)
    refreshControl = refresh

    // Creating view for extending background color
    var frame = tableView.bounds
    frame.origin.y = -frame.size.height
    let backgroundView = UIView(frame: frame)
    backgroundView.autoresizingMask = .flexibleWidth
    backgroundView.backgroundColor = backgroundColor

    // Adding the view below the refresh control
    tableView.insertSubview(backgroundView, atIndex: 0) // This has to be after refreshControl = refresh
}