You could try re sizing your image to the frame, stretching it vertically but leaving it the same size horizontally then set it to repeat like you currently do.
As far as I'm aware there isn't a built in setting to stretch on one axis and repeat on another.
The code might look something like this:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenHeight = screenRect.size.height;
UIImage * targetImage = [UIImage imageNamed:@"background.png"];
UIView * yourView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, targetImage.size.width, screenHeight)];
// redraw the image
UIGraphicsBeginImageContextWithOptions(yourView.frame.size, NO, 0.f);
[targetImage drawInRect:CGRectMake(0.f, 0.f, targetImage.size.width, screenHeight)];
UIImage * resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.view setBackgroundColor:[UIColor colorWithPatternImage:resultImage]];
Re-sizing the image
Getting screen size