Только что обновившись до 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?
Большое спасибо!