If you’ve ever wanted a light coloured text status bar, you may have experienced difficulties. If you have the current VS Plugin with current being (in iOS 8.1), Xamarin Studio 5.5.3. My VS plugin and Windows Xamarin, then you’ll see you don’t have the choice of picking it in the info.plist editor. The choices are Default, Black Transparent and Black Opaque.

Those last two choices are now deprecated and there should be a Light Content. This changed in iOS 7.0 (see the iOS 7.0 transition guide).

For the fixes, I recommend that you edit info.plist with anything but the VS plugin, at least until they fix it. I use programmers notebook 2 which is excellent.

You need to add the following lines in info.plist:


and in AppDelegate.cs you need to add the following line. I’ve shown it bold and in my code I’m using Tabs so create a Tab Controller (my own class) rather than the usual UIViewController.

            tabController = new TabController();
    UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.LightContent, false);
	    UIApplication.SharedApplication.SetStatusBarHidden (false, false);
            window.RootViewController = tabController;
            return true;

If you have a launch image you’ll probably want the status bar hidden during launch. If you had previously ticked the hide during application launch checkbox, it adds the following into info.plist.


What this also does with the Light Content fix is keep the status bar hidden so add the second line above (SetStatusBarHidden) as well to unhide it.

To try this fix out, download the code from here :Xamarin Sample for Tab Bars.

Next change the TabBarController so a tab or two is displaying dark colours.

			tab1 = new UIViewController();
			tab1.Title = "Gray";
			tab1.View.BackgroundColor = UIColor.Gray;

and add the one or two lines above to AppDelegate.cs

I added Default.png and the other variations for iPhone 5, retina display fils and they appeared in the Resources folder. These are for loading screens and are built in as part of the bundle after you add them.

However in doing some work on rolling my own Splash screen so it can have text added, I decided to remove them.

In Xamarin Studio (on Mac) you can unset them, but compiling gave 2 errors about missing files. Looking in the info.plist on the source tab revealed that two strings were still there so I manually removed those. I did a clean then a Build and still got the errors. I did a clean and a Rebuild and still got the same errors. Finally I closed Xamarin Studio down, then reopened it and it built fine. Just a minor irritation.

One of the nice things about Visual Studio 2012 is the Code Analysis. It’s worth doing to try and find underlying problems and I found some in mine. The code worked fine, but Code Analysis told me I was doing naughties with a Virtual Method in a constructor.

Mea culpa. I was indeed. I’d created a View object with my Subclassed View in a CustomViewController.

        public override void ViewDidLoad()
            View = new MainView(UIScreen.MainScreen.Bounds);

But I’d been doing all sorts in the MainView() constructor that needed not to be there, though it had seemed to run ok. If configuration data is absent I want to stop things and have it entered. So I was creating SubViews (Controls) and then calling the UIView.AddSubView() that MainView inherited from within the Constructor. Shock Horror Probe! Bad Code Alert…

The risk is that a virtual method may not have been correctly assigned and the compiler doesn’t really like Constructors in C# to have to worry about this. After a Constructor has finished, things should be just swell.

The trick is to move the code into a subclassed ViewController.ViewWillAppear(). This is called whenever the View is about to appear. Use a bool variable to let things that should be initialized here just the once be only called just the once.

        public override void ViewWillAppear(bool animated)
            if ((View as MainView).ConfigCheck() && OneOff)
                OneOff = false;
                // one off code here

This is on Windows 7 and happens every day if I don’t start the Xamarin Bonjour service before Visual Studio and opening a Xamarin.iOS project. It’s not that big a deal but something must be switching the Xamarin Bonjour Service from Automatic. I set it to automatic a few times but it gets reset to Manual. Once it’s running it stays running for the rest of the day.


If you get this make sure the Bonjour Service is running. If it’s not, open the services MMC. You can do this from Task Manager but make sure on the Processes tab you click the Show processes from all users button as the service may not start. Then on the services Tab in Task Manager, at the bottom right then when the Services MMC opens scroll to the bottom. If you don’t see Started then right click on the service and click Start.


Hopefully you should be able to select iPhone 6.1 in the combo box and all will be well. If not see this tip on Visual Studio to Mac Connectivity.