Изменить цвет фона UIActivityViewController

В iOS 7 стандартный UIActivityViewController имеет полупрозрачный беловатый фон. Наоборот, у моего приложения темная тема. Выглядит ужасно, когда белый UIAcitivityViewController появляется на темном фоне приложения.

Есть ли способ изменить цвет фона UIAcitivityViewController?

Я пробовал activityVC.view.backgroundColor = [UIColor blackColor], но это делает весь экран черным, а не только область, занятую значками UIAcitivity, как стандартный белый фон.

введите здесь описание изображения


person Mischa    schedule 28.10.2013    source источник


Ответы (4)


Это должно помочь:

[[UIView appearanceWhenContainedIn:[UIActivityViewController class], nil] setBackgroundColor:[UIColor greenColor]];
person Nikos M.    schedule 28.10.2013
comment
Это имеет тот же эффект, что и activityVC.view.backgroundColor = [UIColor blackColor]. Он делает черным все, а не только нижнюю часть с иконками. Кроме того, когда я выбираю цвет с альфой, то есть 0,5, это выглядит странно, потому что я вижу кадры подвидов. - person Mischa; 29.10.2013

Хотя мое решение кажется немного нестабильным, оно работает как с iOS7, так и с iOS8. Это также не приведет к сбою вашего приложения, если что-то внезапно изменится;

UIActivityViewController *aVC = [[UIActivityViewController alloc] initWithActivityItems:@[[NSURL urlWithString:@"http://example.com"] applicationActivities:nil];
id targetView = [[[[[[[[[[[aVC.view.subviews lastObject] subviews] firstObject] subviews] firstObject] subviews] firstObject] subviews] firstObject] subviews] firstObject];
if ([targetView respondsToSelector:@selector(setBackgroundColor:)])
{
    UIColor *targetColor = ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) ? [[UIColor redColor] colorWithAlphaComponent:0.3] : [UIColor redColor];
    [targetView setBackgroundColor:targetColor];
}

Как это выглядит в симуляторе, например:

введите здесь описание изображения

person mmackh    schedule 21.09.2014

Все, что я получил, это изменить фон основного вида. Не удалось изменить цвет этикетки внутри него.

let aType = NSClassFromString("_UIShareExtensionRemoteViewController") as! UIAppearanceContainer.Type
UIView.appearance(whenContainedInInstancesOf: [aType.self]).backgroundColor = UIColor.red
person Allan    schedule 04.04.2019

person    schedule
comment
Пожалуйста, добавьте некоторые пояснения. - person DontVoteMeDown; 19.12.2013