Как установить для ios13 UISegmentedControl backgroundColor белый цвет? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь установить цвет фона сегментированного управления в 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. В иерархии представлений фоновое изображение отображается белым цветом, а визуальное представление отображает правильный цвет.

Это ошибка? У кого-нибудь есть подсказки, как преодолеть эту проблему?

...