Опираясь на предыдущие ответы. Если вы хотите, чтобы между значком и заголовком кнопки было поле, код должен немного измениться, чтобы не допустить плавания надписи и значка над границами кнопок внутреннего размера.
let margin = CGFloat(4.0)
button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, 0, button.imageView.frame.size.width);
button.imageEdgeInsets = UIEdgeInsetsMake(0, button.titleLabel.frame.size.width, 0, -button.titleLabel.frame.size.width)
button.contentEdgeInsets = UIEdgeInsetsMake(0, margin, 0, margin)
Последняя строка кода важна для расчета размера содержимого при автоматическом размещении.