Question

When an iOS app rotates it will reveal a black background when the app is between portrait and landscape. Is it possible to change this color from the default black to white? Changing the UIWindow's background color will not help. Here is an example of the black background in Safari during rotation: Safari rotation

Was it helpful?

Solution

I have done something similar but I couldn't find the source now, but here is the idea:

Create and add a significantly larger view as backing view and center it.

Add the UIWebView as subview of this large view whose background is white.

Re-position the center of the UIWebView, too.

OTHER TIPS

You can do this way: enter image description here

Add a UIViewController and set it as initial VC (in screenshot it is MainVC).
Add two UIViewContainer: first for holding your background view , and second for your other vcs.
Override viewDidLayoutSubviews in implementation file of background VC (in this case the .m file of red VC)

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    //Some hardcode :)
    self.view.frame = CGRectMake(-100, -100, 1136, 1136);
}

After doing this you will have something like this:

enter image description here

I know this is not the best solution, but you can do this way until you find the best one.

I got the same issue. As I understand that you want to remove the black background. The easiest solution that I used is set you window clipsToBounds = true instead of your rootViewController.

window?.clipsToBounds = true

You can solve the problem by adding empty general view controller with oversized bounds into your root viewController and make it the lowest in the view hierarchy:

CGFloat length = 2*MAX(rootViewController.view.bounds.size.height, rootViewController.view.bounds.size.width);

UIView *oversizedBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, length, length)];
oversizedBackgroundView.center = vc.view.center;
oversizedBackgroundView.backgroundColor = [UIColor whiteColor];
rootViewController.view.clipsToBounds = NO;
[rootViewController.view addSubview:oversizedBackgroundView];
[rootViewController.view sendSubviewToBack:oversizedBackgroundView];

self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];

The key point here is to set clipsToBounds to NO

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top