Я пытаюсь установить цвет фона сегментированного управления в iOS 13 для нормального состояния.
У меня та же проблема, что и здесь: Как установить backgroundColor для UISegmentedControl на белый в iOS13
Ответ на вопрос по ссылке выше не поможет. Я хотел бы сохранить поведение анимации слайдов ios13, но при этом сегменты нормального состояния должны быть белыми, а не светло-серыми.
Кажется, что в segmentedControl есть изображение по умолчанию, которое вызывает эффект окрашивания grey / offWhite,
Я попытался установить фоновое изображение в качестве цветов для выбранного состояния и нормального для UIBarMetrics.default, но это просто дает мне поведение pre-ios13
if #available(iOS 13, *) {
guard let selectedTintColor = selectedSegmentTintColor else { return }
let tintColorImage = selectedTintColor.asImage()
let backgroundColor = self.backgroundColor ?? UIColor.clear
setBackgroundImage(backgroundColor.asImage(), for: .normal, barMetrics: .default)
setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
setBackgroundImage(selectedTintColor.withAlphaComponent(0.2).asImage(), for: .highlighted, barMetrics: .default)
setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
}
extension UIImage {
func asImage(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
return UIGraphicsImageRenderer(size: size).image { rendererContext in
self.setFill()
rendererContext.fill(CGRect(origin: .zero, size: size))
}
}
}
//I also added the following to the View
override func layoutSubviews() {
super.layoutSubviews()
subviews.compactMap{ $0 as? UIImageView }.forEach {
$0.isHidden = $0.image == nil
}
}
с последней частью (layoutSubviews) я смог увидеть белый backgroundColor, прежде чем сделать выбор сегмента. после вызова segmentedControlDidChange белый цвет исчезает, а также выбранный сегмент по умолчанию теперь становится серым и после изменения. но ни один из текста больше не виден ...
эта информация от моего отладчика: сегментированный COntrol имеет bgColor белого цвета -> и содержит uiImageView для всех сегментов с чистым изображением и bgColor изnil
Выбранный сегмент поверх упомянутого ^^ uiImageView имеет правильный selectedSegmentTintColor в качестве дополнительного uiImageView и все еще с backgroundColor, равным нулю, но изображение имеет правильный цвет оттенка
Послевсе мои усилия я получаю такое же поведение, как человек в ссылке abov. В иерархии представлений фоновое изображение отображается белым цветом, а визуальное представление отображает правильный цвет.
Это ошибка? У кого-нибудь есть подсказки, как преодолеть эту проблему?