Насколько я могу судить, в вашем коде нет ничего плохого, что должно приводить к обрезке правой стороны изображения. Ниже приведен точный код, который я использую, который, как я знаю, работает, чтобы получить тот же эффект, который вы ищете.
UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 245, 51)];
button.autoresizingMask=UIViewAutoresizingFlexibleWidth;
[button setBackgroundImage:[[UIImage imageNamed:@"userbubble.png"] stretchableImageWithLeftCapWidth:40 topCapHeight:0] forState:UIControlStateNormal];
[self.view addSubview:button];
Я предполагаю, что проблема связана с используемым вами png или, возможно, с настройкой Compress PNG Files в вашем проекте. Кроме того, поскольку изображение, которое вы используете, настолько велико, попробуйте выложить левую крышку, скажем, на 40 или 50 пикселей.