SelectedTintЦвет элемента управления сегментом не закругленный угол на iOS 13 - PullRequest
3 голосов
/ 10 октября 2019

Закругленный угол отлично работает на iOS 12 и ниже, но он не работает на iOS 13. Я создал собственный класс управления сегментом.

Код:

class SegmentedControl: UISegmentedControl {
    override func layoutSubviews() {
      super.layoutSubviews()
      layer.cornerRadius = self.bounds.size.height / 2.0
      layer.borderColor = UIColor(red: 170.0/255.0, green: 170.0/255.0, blue: 170.0/255.0, alpha: 1.0).cgColor
      layer.borderWidth = 1.0
      layer.masksToBounds = true
      clipsToBounds = true

   }
}

Я прошел этот пост - Как изменить цвета сегмента в UISegmentedControl в iOS 13? , но я не смог найти никакого решения.

Снимок экрана: enter image description here

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

Я столкнулся с той же проблемой на iOS 13. Затем я углубился в иерархию представлений и обнаружил, что у нее несколько подпредставлений. Итак, я сделал трюк для iOS 13. Вам нужно сделать следующие изменения для iOS 13 -

  1. Изменить selectedSegmentTintColor на Clear - self.selectedSegmentTintColor = .clear
  2. Добавитьследующий фрагмент кода внутри layoutSubviews -

    for i in 0...subviews.count - 1{
    
            if let subview = subviews[i] as? UIImageView{
    
                if i == self.selectedSegmentIndex {
    
                    subview.backgroundColor = UIColor(red: 170.0/255.0, green: 170.0/255.0, blue: 170.0/255.0, alpha: 1.0)
    
                }else{
    
                    subview.backgroundColor = .clear
                }
    
            }
        }
    

Надеюсь, это поможет вам.

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

у меня этот код работает iOS 13 - Swift 5.1

    segment.layer.cornerRadius = 12
    segment.layer.borderWidth = 1
    segment.layer.borderColor = UIColor.black.cgColor
    segment.font(name: "TheSans-Plain", size: 14)
    segment.clipsToBounds = true
    segment.layer.masksToBounds = true

    if #available(iOS 13.0, *) {
        segment.selectedSegmentTintColor = .red
    } 
...