Everytime I start a new Xcode/iOS project, there are few rituals I perform, quite religiously.
Disable Storyboards
I dislike storyboards and xibs with passion. Fiddling around a clunky Xcode interface to get layouts to work, with uncertainty of how they will behave on different resolutions, is quite annoying. And in large team settings which I worked in before, its quite frankly useless.
What’s needed for doing it?
- Delete files
Main.storyboardandMain-iPad.storyboard - Delete the
"Main Interface"setting found inProject SettingsTargets (select)GeneralDeployment InfoMain Interface.
Setup the AppDelegate
Now that the storyboards are gone, we need to configure the app delegate as to what view controller is to be shown
I often end up doing this
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Instantiate the VC
MainViewController *vc = [MainViewController new];
// Instantiate the navigation bar
UINavigationController *nav = [UINavigationController alloc] initWithRootViewController:vc];
// Instantiate window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// Set the root vc
self.window.rootViewController = nav;
// make the window visible
[self.window makeKeyAndVisible];
return YES;
}
Solid UINavigationBar
I find the the default navigation bar that comes along with translucent background useless. Majority of all apps end up either with a solid color or a subtle gradient.
Sometimes I prefer to subclass UINavigationController and other times, I just configure it directly. Either case the essential snippet of code is this:
// Disable translucency
navViewController.navigationBar.translucent = NO;
// Set it to something jazzy
navViewController.navigationBar.barTintColor = [UIColor orangeColor];
Setup MainViewController
When a view controller is added to a UINavigationController stack, it doesn’t flow from below the navigation bar, but from underneath it (from iOS 7~). This again seems quite pointless.
The sane default I follow is to set the edgesForExtendedLayout property
MainViewController -viewDidLoad
self.edgesForExtendedLayout = UIRectEdgeNone;
Misc
Auto Layout:
Although it tends to be more verbose, I prefer writing code that declares how interface objects look and behave proportional to the screen size, than use Storyboards or XIBs.
Manual Layout:
Sometimes I don’t mind setting the frames manually for simpler things.
Libraries:
Most times I end up adding these as well
- Flurry and Google analytics for analytics/tracking
- Additional classes to enable use of a file based, simple key value store.
- Shorthand functions Eg:
UIColor* RGBColor(r,g,b) - UI Utilities that allow me to do this
view.top = 20;More on these later.