Как сделать UITabBar НЕ прозрачным при использовании iOS 13 Dark Mode? - PullRequest
0 голосов
/ 01 октября 2019

Когда я устанавливаю цвет фона UITabBar, iOS автоматически осветляет этот цвет, поскольку значение по умолчанию UITabBar является полупрозрачным.

Но я бы хотел использовать UITabBar, который НЕ полупрозрачный . В iOS 12 и ниже я решил эту проблему, установив фоновое изображение нужного цвета:

// Create an image from a given color using a custom extension
[[UITabBar appearance] setBackgroundImage:[UIImage colorImageWithColor:[UIColor redColor]]];

Это прекрасно работает . Тем не менее, я хотел бы использовать новый темный режим в iOS 13. Очевидно, что это невозможно сделать при использовании цветного фонового изображения вместо цвета фона. Вместо этого не без ручной реакции на изменение внешнего вида, чтобы переключиться на другое цветное изображение.

Использование именованных цветов было бы намного лучше, ЕСЛИ было бы возможно сказать iOS не рисовать `UITabBar полупрозрачный.


Если я попытаюсь отключить полупрозрачный эффект, UITabBar станет полностью белым вместо указанного цвета.

[[UITabBar appearance] setTranslucent:false];

Как решить эту проблему?

1 Ответ

0 голосов
/ 01 октября 2019

Мне удалось решить проблему с помощью пользовательского подкласса UITabBar.

  • Когда приложение запускает динамический цвет MyDynamicTabBarBG устанавливается как непрозрачный фон, создавая изображение из этого цвета
  • Переключение между обычным и темным режимом, когда приложение активнообнаружены с помощью traitCollectionDidChange. Затем динамический цвет просто повторно применяется путем создания нового изображения.

Код:

@implementation MCTabBar

- (void)awakeFromNib {
    [super awakeFromNib];

    // Create a color image from a given color using a custom extension
    [self setBackgroundImage:[UIImage colorImageWithColor:[UIColor colorNamed:@"MyDynamicTabBarBG"]]];
}

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [self setBackgroundImage:[UIImage colorImageWithColor:[UIColor colorNamed:@"MyDynamicTabBarBG"]]];
}

@end

Это работает, но довольно забавно. Неужели нет более элегантного решения?

...