Saint Robson
Saint Robson

Reputation: 5525

Adding Background Image into View Controller

I tried to use this code under in my app delegate in order to add a PNG image as a view controller's background :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[self window] setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]];

    return YES;
}

but I have no luck with it... the view controller still has a white background. What's wrong with that code?

Upvotes: 15

Views: 45167

Answers (9)

Enes Karaosman
Enes Karaosman

Reputation: 2067

You could also write extension to UIViewController to use in multiple places

extension UIViewController {
    func setBackgroundImage(imageName: String) {
        let backgroundImage = UIImage(named: imageName)
        let backgroundImageView = UIImageView(frame: self.view.frame)
        backgroundImageView.image = backgroundImage
        self.view.insertSubview(backgroundImageView, at: 0)
    }
}

Upvotes: 2

Paco Cardenal
Paco Cardenal

Reputation: 91

Swift 4 version of the @hadaytullah answer with some improvements in image adjustments:

override func viewDidLoad() {
    super.viewDidLoad()

    let backgroundImage = UIImage.init(named: "yourImageNameHere")
    let backgroundImageView = UIImageView.init(frame: self.view.frame)

    backgroundImageView.image = backgroundImage
    backgroundImageView.contentMode = .scaleAspectFill
    backgroundImageView.alpha = 0.1

    self.view.insertSubview(backgroundImageView, at: 0)
}

Upvotes: 9

Amr Angry
Amr Angry

Reputation: 3851

you may consider the following solution i use in swift 3.0 and tested in xcode 8

    // init and image with your pattern image
    var bgUIImage : UIImage = UIImage(named: "yourIamgeName")!
    let myInsets : UIEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)
    bgUIImage = bgUIImage.resizableImage(withCapInsets: myInsets)
    self.view.backgroundColor = UIColor.init(patternImage:bgUIImage)

the result will be the following image

enter image description here

Upvotes: 1

Boris Nikolic
Boris Nikolic

Reputation: 756

You can do it from the storyboard.

Add UIImageView and just set your background image for the Image property in the Attribute Inspector.

Upvotes: 0

Esqarrouth
Esqarrouth

Reputation: 39201

Here is how it is in swift:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.png"))
}

Upvotes: 7

umakanta
umakanta

Reputation: 1059

If your view controller is having tableView/collection view the below code will suitable for you.

 - (void)viewDidLoad
{
   [super viewDidLoad];

   self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourImage.png"]];
}

Upvotes: 1

hadaytullah
hadaytullah

Reputation: 1184

The accepted answer and Michael's answer will work, however, proper way is to use a UIImageView instead. It gives more control over resizing, scaling etc according to different screen sizes on devices. Here is the example;

First create a UIImage.

UIImage *backgroundImage = [UIImage imageNamed:@"iphone_skyline3.jpg"];

Second create a UIImageView. Set the frame size to the parent's (self) frame size. This is important as the frame size will vary on different devices. Stretching will occur depending on the image size. Next assign the image to the view.

UIImageView *backgroundImageView=[[UIImageView alloc]initWithFrame:self.view.frame];
backgroundImageView.image=backgroundImage;

Finally, to keep the image behind all controls do the following. It is important if you are setting the image as a background for your app.

[self.view insertSubview:backgroundImageView atIndex:0];

Upvotes: 37

Tarek Hallak
Tarek Hallak

Reputation: 18470

You need to set the background for your ViewController's view

In your ViewController init or viewDidLoad:

[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]];

Upvotes: 24

Michael M
Michael M

Reputation: 1034

In viewDidLoad, I use:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImageString.png"]];

Alternatively, if you want to do it in appDelegate, I think its possible to

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImageString.png"]]];

Then in viewDidLoad set background to [UIColor clearColor] ?

Upvotes: 1

Related Questions