I'm going to create a Universal iOS application using Swift. The functionality for the iPhone and iPad versions is 70% the same but some parts are different. The app will support all orientations.
What is the best approach for a universal architecture?
Should I use separate storyboards and separate classes for iPhone/iPad with separate targets or use the same files?
Separate storyboards would be the better option if you are planning to have very different layouts between the iPhone and iPad storyboards.
Personally, I would try to use the same storyboard for both and utilize both size classes and auto-layout (theres a good tutorial on auto-layout here) to adjust the views as #RDSpinz suggested in his comment.
Related
I am trying to find answer, That Since we have iPhone 4, 5 ,6, 6 plus (I heard some rumors about iPhone 6 mini too) do we need Different Storyboards?
Earlier I use to make the Applications using XIB files only. Taking one XIB for iPhone 4 and 5 and using autoresizing to make them Compatible for both devices. If I had to make the same application for iPad also, I had to take the different XIB.
After Xcode 6.1 release I started using the StoryBoards and auto-layout, Size Classes. I made an app that was for all iPhones and iPad. I used a single Storyboard for iPhone and iPad and got success. But doing this was very time consuming.
From now on Should I make different Storyboards? Like one for iPhone 4 and 5, another one for iPhone 6 and 6 plus? Because Some time the UI's are too complex that using auto-layout or auto-resizing on the same Storyboard for all devices just destroy the beauty of the UI.
Please Suggest. And I have gone through some Stack answers that are not much Convincing.
In my opinion, different storyboards for iPhone/iPad is necessary only if you gonna provide large different layout for them.
The basic rule is how many views have different layout? Totally or just few views?
If the answer is 2 of 30 or kind of that, make a second viewcontrollews layout with same "custom class" but different "Story ID" is enough.
The answer to your question is: No, we do not need separate storyboards. The answer to your question of whether you should make different storyboards is not so simple.
Basically it is a decision you will make based on your judgement. There is no correct answer. I'd suggest you start with one and if things start getting messy, create a second one. Just don't make the first storyboard too big before you decide if you need to split it out into two or not. It really depends on how different your designs are.
There is possible to add storyboard for any screen size?
Example if the iPhone is 6 plus load storyboard 1 if is iPhone 5 load storyboard 2.
Yes it's possible, although I would not recommend it. In fact I would strongly recommend against it.
It is a lot more work to develop in the first place, is a lot more error-prone, and is also a lot more work to test and maintain, and makes it possible to have platform-specific bugs when you have different configurations for each screen size.
With the size classes added in iOS 8 Apple has made dealing with different sized displays easier and cleaner. They are pushing developers away from separate storyboards for iPhone and iPad and towards a single storyboard that manages all platforms.
Try having one storyboard with a universal path then splitting the path using segues based on the phone you are using. I made a cocoapod for screen sizes that might be useful for you.
Here's a tutorial
I've been developing iOS apps for the past 3 years and learned to do so without the use of nibs and storyboards. With the release of iOS 8 and the new iPhones there are ALOT of factors to take into account when developing for iPhone and even iPad devices (Resolution, Screen size, etc.).
The first problem I ran into with Xcode 6 is you can't create a empty project anymore. The closest option is a single view application. I found the following answer here.
Now it seems that apple is really pushing auto-layout, the use of the size classes and the use of storyboards and Interface builder. Is there any way to support the native resolutions of the iPhone 5, 6 and 6 plus and do this programmatically? The only option I can see is defining the frame of each UI element for each device which will lead to a ton of code.
Auto layout IS programmatic. Apple has given the necessary API's to handle size classes entirely in code if you don't want to use interface builder or storyboards and there has always been ways of adding constraints in code too.
You might think IB is a silly tool for noob developers or is only for basic apps and you need more power or whatever your reason, but maybe trying to do every thing yourself in code is a bet you have now lost. Give tools a try.
It's referred to as VFL or Visual Format Language.
VFL Tutorial
I am trying to create a universal app capable for all devices, but it is not scaling correctly. Below (the correct version) is a screenshot of my iPhone 5s, and the one that is out of scale is a screenshot of my iPad 2.
Am I doing it correctly making it scale? Or should I use 2 storyboards and assign one to iPhone, and one to iPad?
Its good to make two different xib. But for small screen you have to apply proper auto sizing then it will not be a problem. You can use this for example
For Section 1:
For Section 2:
For Section 3:
and
For Section 4&5:
The better way of doing this is making two separate storyboards. One for iPhone and other for iPad. This offers you the flexibility to play with both in your own ways and there are many cool things that you can work out with iPads. And to do that, you need separate storyboards in your app. It eliminates the dependency between the look and feel of both the devices.
For making two storyboards the easy way, see this :
How/whether to make a universal storyboard in Xcode
For the selection of appropriate storyboards based on devices, check this :
Selecting different storyboards based on device type
This might help you immensely.
I am in process of creating a new universal application.
Would it be "bad" or against guidelines to create separate classes to control the iPad version?
I am using a tabbarcontroller for the iPhone version and a splitview for the iPad version.
It seems easier in my case to create new classes to handle all the iPad stuff.
Thank you for your time!
Nope, not bad or against guidelines at all.
In my own universal apps, I use separate XIB's for iPad versus iPhone interfaces. And sometimes different (or additional) classes for iPads as well.
Probably one of the more important things is that the functionality is roughly the same between iPad & iPhone versions... will the tab bar view do the same thing the split view do, for example?