I am using currently Xcode 4.3.2. I have developed a tiny application and specified 'Universal' for the target, and I see two .xib files are generated. One is for iPhone, and the other is for iPad. I have designed minimum UI with iPhone .xib, and now would like to use the same application for iPad also.
1) Do I have to again design iPad.xib, as I designed iPhone.xib?.
2) As for as I understand 'Universal' means for both?. If so, then why are two different .xib files provided?
How do I make my application run on iPad as well, with minimal changes?
It's two separate files, because UI for iPad and UI for iPhone are quite different. Probably it would look strange if you just scale up your iPhone UI for iPad. In the iPad xib you make use of the iPad's larger display.
The easiest way is to copy and paste the items from your iphone .xib into your ipad .xib and the resize the items to be the appropriate sizes for ipad.
You can create a .xib from scratch for ipad and then select it under Targets > "Application name" > Summary > iPad Deployment Info, Main storyboard.
But yes, while you can use the same .xib and just use it in x2 mode, it's better to make another interface, and it only takes a few minutes usually.
universal means that the bits of the application can be executed on the two architectures (iPhone and iPad), It is not related to nib files, you have 2 options:
1) use the same iphone nib file and than tap (2x) on the bottom left of the screen when iPad simulator is launched, which is not an appropriate way.
2) the best way is to do two separate nib files, each for a certain device.
Related
On a test drive app, I have a basic UIViewController (QZTestViewController) loaded with its xib file with only one UILabel centered by autolayout. This controller is opened from the home controller (QZHomeViewController designed in the default storyboard).
The problem is that the height of this label is smaller that the result on the simulator. See it in XIB/Simulator comparison snapshot.
Any idea ? A small test project is available here if someone can have a look and help me before I become crazy.
PS: Note that the simulated metrics is set to iPhone 5.5-inch in the XIB file and I run the simulator iPhone 6s Plus (9.3).
From the size of the status bar items on the Simulator (and double-checking your project), I can tell that your app is being upscaled to fit the screen. This is happening because it's not properly configured to the 4.7" or 5.5" screens.
To fix that and make it load with the correct resolution, simply add a LaunchScreen storyboard to your project. Go to your project settings, select your Target and in App Icons and Launch Images select a storyboard or xib file to Launch Screen File. This will make the app compatible with the larger screens' resolutions, and your button will have the correct size as it will not be upscaled :)
I have a brand new Swift 2.0 XCode 7 Storyboard based application.
Target is set to 9.2. I'm currently supporting any device with GPS that can run ios 9.2
I started with the Tabbed View Template and I'm working in wAny and hAny and a single Storyboard.
It works fine in the simulator on a bunch of phones, both orientations and works fine on my 6s plus, 6s, 6 plus and a 5.
But for some users the scaling is wrong and everything comes out squished.
Even in landscape mode the TabBar Icons are very close to each other.
Narrower than even on my 6s plus in portrait.
I believe this is caused by my application not having a Launch bitmap.
My understanding is there are two ways to implement this.
Launcher .XIB/.NIB with half a dozen specific sized bitmaps attached. Or a StoryBoard Launcher with ... exactly what.
The "Or StoryBoard" is a little vague. But I wanted to keep things using the modern approach since this app is new and targeted users tend to have the latest device.
So I created my Launch Image set and tried to attached it to the UIImageView in the Launcher StoryBoard. It won't list items that are tagged as "Launcher Image Set". It will show other Image Sets and Icons. But not the ones specifically for Launcher. It shows an "L" in the xcassets list next to the Launcher Image set. I believe I have the build project setting set correctly and it looks perfect on many of the same exact devices.
After some digging, I read that if you use the "StoryBoard" method you don't need the 6 or so bitmaps anymore. You can put anything in the Storyboard Launcher View and treat it just like you would treat your main storyboard.
So I did that. I just centered a small image.png file in the View of the Launchers Storyboard. Works on all simulations and my iPhone 6s plus. I did not pin it to the edges because that would mess up the aspect ratio of the image.
A very small set of users still have the issue and one of them even uninstalled and reinstalled.
I tried playing with setting phone Zoomed, Normal, Text Size, Bold etc. They all work. Users also don't have anything out of the ordinary on these system settings.
So first, do I need the 6 proper sized bitmaps or not? I read conflicting info on this.
If I want to use the 6 images on a storyboard how to I get them in the UIImageView of the Launcher StoryBoard if they won't list? Should I put them in a regular image set. Does the "Launcher Image Set" only work for the for the Launcher.XIB?
If it's not the Launcher window, what else could it be causing this?
I know I could create a XIB/NIB with the 6 bitmaps. But that seems like I'm going backwards and I don't care about old OS versions or older phones.
I think I found my answer. When using a Storyboard Launcher you cannot use a "Launch Image Set" for your Launcher Storyboard. You have to use an Image Set.
This is the best Video I found that covers it A-Z.
https://www.youtube.com/watch?v=Vz6tCgXgZFo
It also didn't fix my initial problem. Which I'll post separately. It scales correct in Portrait but not in Landscape for hand full of users. Using the same hardware as others that it works fine on.
I was making a user interface using storyboards and when I built my app to see how it would look in the iOS simulator it didn't look like the viewcontroller in the storyboard (some of the buttons were moved around and I had to move one button way down so it was in the place i wanted it to be). Does anyone know why this is?
Yes, the reason is auto layout, it will automatically position elements on a relative basis depending on the device you're running.
You can turn autolayout off, or build for all devices at once and keep it on.
You may want to read iOS Auto Layout Demystified by Erica Sadun which goes in depth to the world of autolayout.
I am finishing up an app which only runs in portrait mode on the iPad and iPhone. As a result, I don't provide any landscape launch images - I could include them, but they would never be seen, so I'd prefer to save the space in my app.
How do I stop XCode trying to auto assign 'Default.png' and 'Default#2x.png' into the landscape images for the iPad? This causes a warning to appear, since these images are for the iPhone and so are the wrong dimensions. Alternatively, a solution to suppress the warning that appears would suffice.
Control-click on an unwanted iPad launch image in the Summary window and choose Delete. This will remove the reference to the image as a launch image for iPad. Even better, go ahead and include solid black PNG images for the unneeded launch images. They will be compressed by Xcode when it builds your app, so that they will take up virtually no space in the app bundle.
I regard the fact that Xcode automatically creates default launch images for iPhone but not iPad as a bug. I suggest you complain about this behavior at bugreporter.apple.com.
EDIT: Just to be clear, what you want is a minimal set of properly sized images with the following names:
Default.png
Default#2x.png
Default-568h#2x.png
Default-Portrait~ipad.png
Default-Landscape~ipad.png
Default-Portrait#2x~ipad.png
Default-Landscape#2x~ipad.png
This will prevent Xcode from using e.g. an iPhone launch image in an iPad slot.
I developed my app for Ipad, now I should adapt it for Iphone. My app is quite heavy with a lot of images that should be available offline. These images are located in xib files and are sometimes loaded dynamically from app bundle. I need to limit the size of my app.
should I make a universal app or two different apps (each one with its own set of images optimized for the device)?
If I do a single universal app can I dynamically resize my "dynamically loaded images" in code. what should I do for the images in xibs?
I finally found my answer, one app with different xib sharing the same view controllers.
To limit the weight :
Some images must be modified (eg: backgrounds) because they need to
be adapted to the iphone screen resolution. I just named them
image~iphone.png. The cool thing is that you dont need to modify
images'name in xib or code because the ~iphone signifies image for
the iphone.
Some others can remain the same (eg: buttons) and I'll just size them
down in the IB.