Настройка управления сегментом iOS13 - PullRequest
1 голос
/ 21 сентября 2019

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

Я бы хотел вернуть их обратно к тому, что было раньше, и я частично там со следующим кодом, в пределах AppDelegate.didFinishLaunchingWithOptions

UISegmentedControl.appearance().setTitleTextAttributes(segmentAttributes , for: .normal)
UISegmentedControl.appearance().setTitleTextAttributes(segmentSelectedAttributes , for: .selected)
UISegmentedControl.appearance().setBackgroundImage(UIImage.imageWithColor(UIColor.white, size: CGSize(width: 1, height: 1)), for: .normal, barMetrics: .default)
UISegmentedControl.appearance().setBackgroundImage(UIImage.imageWithColor(uicolor_normal, size: CGSize(width: 1, height: 1)), for: .selected, barMetrics: .default)
UISegmentedControl.appearance().setDividerImage(UIImage.imageWithColor(uicolor_normal, size: CGSize(width: 1, height: 1)),forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)

Благодарю этот вопрос для некоторых указателей здесь.Однако есть некоторые вещи, которые не были восстановлены, и я думаю, что они связаны с layer - что-то вроде этого:

layer.borderWidth = 1
layer.borderColor = UIColor.blue
layer.masksToBounds = true
layer.cornerRadius = 2

(ширина границы, цвет границы и радиус угла).Приведенный выше вопрос показывает, что эти вещи добавляются, но я бы хотел разместить этот код в одном месте (AppDelegate.didFinishLaunchingWithOptions), чтобы сохранить мой код в чистоте.Поэтому я попытался добавить это:

UISegmentedControl.appearance().layer.borderWidth = 1
UISegmentedControl.appearance().layer.borderColor = uicolor_normal.cgColor
UISegmentedControl.appearance().layer.masksToBounds = true
UISegmentedControl.appearance().layer.cornerRadius = 2

К сожалению, это не похоже на работу.Возможно, потому что это должно ждать, пока это не нарисовано?Я наткнулся на некоторый немного неуклюжий код , который предлагал сделать что-то похожее на UINavigationBar, но это тоже не сработало:

extension UINavigationBar {

  var castShadow : String {
    get { return "anything fake" }
    set {
        self.layer.shadowOffset = CGSizeMake(0, 3)
        self.layer.shadowRadius = 3.0
        self.layer.shadowColor = UIColor.yellowColor().CGColor
        self.layer.shadowOpacity = 0.7

    }
  }

}
// below should go in didFinishLaunchingWithOptions...
UINavigationBar.appearance().castShadow = ""

Может кто-нибудь дать совет, какповлиять на уровень всех элементов управления сегментами, не добавляя / не изменяя код в моих ViewControllers?

Большое спасибо!

...