Используя Xcode 9.2, ни одно из вышеперечисленных решений не сработало для того, что я искал.
Я искал решение, которое позволило бы мне устанавливать .normalи .selected UIControlStateизображения внутри раскадровки для их исходного режима рендеринга , но внутри файла Swift не должно быть никаких строковых литералов относительно имен изображений.
По сути, внутри вашего кода вы получите изображение, которое вы установили внутри раскадровки для .normalсостояния, и повторно отобразите его как .alwaysOriginal(То же самое для .selectedсостояния), затем вы установите это изображение (которое теперь отображается как оригинальное и не будет зависеть от оттенок) для соответствующего состояния ( .normalи .selected) вашего UIButton.
Вот:
// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)
Таким образом, вы можете установить состояние изображения кнопки, и если имя изображения изменится, это не повлияет на ваш код.