Use resizableImageWithCapInsets and UIEdgeInsets to make a stretching UIButton background image. For example:
UIImage* image = [UIImage imageNamed:@"image.png"];
image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 20)];
[button setBackgroundImage:image forState:UIControlStateHighlighted];
I don't think you can stretch more than one pixel both horizontal and vertical.
Hope this helps.