Partiendo de la respuesta de @split ...
La respuesta es fantástica, pero ignora el hecho de que el botón puede tener insertos personalizados en el borde del título y la imagen que se configuran de antemano (por ejemplo, en el guión gráfico).
Por ejemplo, es posible que desee que la imagen tenga algo de relleno en la parte superior e inferior del contenedor, pero aún así mover la imagen al lado derecho del botón.
Amplié el concepto con este método: -
- (void) moveImageToRightSide {
[self sizeToFit];
CGFloat titleWidth = self.titleLabel.frame.size.width;
CGFloat imageWidth = self.imageView.frame.size.width;
CGFloat gapWidth = self.frame.size.width - titleWidth - imageWidth;
self.titleEdgeInsets = UIEdgeInsetsMake(self.titleEdgeInsets.top,
-imageWidth + self.titleEdgeInsets.left,
self.titleEdgeInsets.bottom,
imageWidth - self.titleEdgeInsets.right);
self.imageEdgeInsets = UIEdgeInsetsMake(self.imageEdgeInsets.top,
titleWidth + self.imageEdgeInsets.left + gapWidth,
self.imageEdgeInsets.bottom,
-titleWidth + self.imageEdgeInsets.right - gapWidth);
}