Usando o Xcode 9.2, nenhuma das soluções acima funcionou para o que eu estava procurando.
Eu estava procurando uma solução que permitisse definir .normale .selected UIControlStateimagens dentro do storyboard para o modo de renderização original , mas, dentro do arquivo Swift, nenhuma literal de cadeia de caracteres deve existir em relação aos nomes das imagens.
Basicamente, dentro do seu código, você obterá a imagem definida no storyboard para .normalestado e a renderizará novamente como .alwaysOriginal(o mesmo para .selectedestado); depois, você definirá a imagem (que agora é renderizada como original e não será afetada por tonalidade) para o estado relevante ( .normale .selected) do seuUIButton .
Aqui está:
// 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)
Dessa forma, você pode definir os estados da imagem do botão e, se o nome da imagem mudar, isso não afetará o seu código.