У меня есть настраиваемое представление @IBDesignable. Он содержит UIView с двумя подклассами UILabels. Пользовательский подкласс UILabel устанавливает шрифт.
Я пытаюсь добиться изменения, сделав цвет фона представления проверяемым свойством, чтобы цвет текста изменился соответствующим образом, чтобы его можно было разобрать.
Мой код ниже. Custom.Colour.<name>
- это просто список определенных цветов.
@IBDesignable
class CustomMiniView: UIView, NibLoadable {
public var view:UIView!
@IBOutlet weak var colourView: UIView!
@IBOutlet weak var headingLabel: CustomUILabel!
@IBOutlet weak var amountLabel: CustomUILabel!
@IBInspectable var blockColor:UIColor! {
didSet {
self.colourView.backgroundColor = blockColor
switch blockColor {
case Custom.Colour.darkBlue:
headingLabel.textColor = .white
amountLabel.textColor = .white
case Custom.Colour.blue:
headingLabel.textColor = .white
amountLabel.textColor = .white
case Custom.Colour.lightBlue:
headingLabel.textColor = Custom.Colour.grey
amountLabel.textColor = Custom.Colour.blue
case Custom.Colour.green:
headingLabel.textColor = .white
amountLabel.textColor = .white
case Custom.Colour.lightGreen:
headingLabel.textColor = Custom.Colour.grey
amountLabel.textColor = Custom.Colour.blue
case Custom.Colour.yellow:
headingLabel.textColor = Custom.Colour.grey
amountLabel.textColor = Custom.Colour.grey
default : printError("We have not handled text colours for a background of this colour. = \(blockColor.hexString)")
}
}
}
public override init(frame: CGRect) {
super.init(frame: frame)
self.setupFromNib()
self.commonInit()
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupFromNib()
self.commonInit()
}
func commonInit() {
self.backgroundColor = .clear
}
}
Это сработало для меня нормально, однако тогда я получал сообщение, что текст везде отображается белым, и мне прислали снимок экрана, который меня смутил. Когда я запустил это в симуляторе и другом устройстве, я увидел, что это не работает. Вот два снимка экрана, показывающих, что происходит на моем iPad и что я ожидаю, а также снимок экрана того, что происходит на некоторых других устройствах и в симуляторе.
Вот что происходит на моем устройстве и ожидаемый результат.
Это то, что происходит на других устройствах, и неправильный результат.
Есть ли причина, по которой это может выглядеть по-разному на разных устройствах? Я не понимаю, в чем причина или как это исправить.
printError
, должно бытьtextColor
при выполнении условияdefault
? - person dfd   schedule 19.06.2018