What exactly are the improvements in auto layout ios 7 and ios 8?
My app is working fine in ios 8 but has different behavior in ios7. Constraints are breaking in ios 7 after loading views multiple times.
I want to know what are the things that ios 8 now handles which ios7 autolayout cannot do before.
Like how iOS 7 and iOS 8 handles "manually added subviews" with autoresizing masks ( Flexible width and Flexible height )
Thanks!!
**im not using size classes and relative to margin
Working with autolayout in iOS 7 and iOS 8 is the same. Adaptive layout is really just an umbrella term for all the new layout tools in Xcode 6 and iOS 8-- one of which being Autolayout. Though autolayout isn't new, it's still a part of the adaptive layout toolset, and it's much improved in iOS 8. Other adaptive layout tools include Size Classes and Adaptive Fonts. I recommend reading this Ray Wenderlich article that has some examples of the new tools: http://www.raywenderlich.com/83276/beginning-adaptive-layout-tutorial
For me, I fixed my ios7 issues by these:
avoid constraints to margin and size classes,
avoid constraints with "aspect ratio"
avoid proportional height and width which conflicts with some push/pop/present dismiss animation in ios 7
Related
For example: I have set in a storyboard scene a vertical space constraint from de bottom of a UIButton to the bottom of the superview with a constant of 20. When running in an iOS 8 device, this is correctly shown, but when running in an iOS 7 device, it looks like this constant becomes higher and the button is shown upper in the screen... I don't understand why this happens, since autolayout is supposed to be available since iOS 7.
Any help? I don`t know how to handle this.
Thanks in advance
One of new things in iOS 8 is the Layout Margin. Layout Margin is a new property available in UIView for iOS 8. So, any objects inherit from UIView will have this property. If you are developing the app for both iOS 7 and iOS 8, you should not use Layout Margin (or use layout margin in a smart way).
So, if you have any constraints related to layout margin and you didn’t do a proper check before launching the app on iOS 7 devices, the app might crash or the arrangement of the objects might be out of order.
Whenever you are trying to add new constraints from the storyboard in XCode 6, “Constrain to Margins” is ticked by default. The meaning of this selection is to add constraints with the new property in iOS 8.
If the deployment target of your app is iOS 7 and above and any of your constraints have this layout margin, the XCode will complain with the warning “Layout attributes relative to the layout margin on iOS prior to 8.0″.
If you are developing the app for both iOS 7 and 8, it is best to “Untick” the Constrain to Margins.
Reference: you should also check this great tutorial
I have to design an application that supports iOS versions from 6.1 to 8.1. In order to support iOS 6.1, i can't create storyboards with size classes. So i have to use only XIBs and use auto layout for the XIBs.
When i run my application in Xcode 6.1, it looks like all the layouts are perfectly fine. But when i run the same application in Xcode 5.1.1, all the views are reshuffled starting from iPhone 4 to iPhone 5.
Now i have to design my XIBs in such a way that the views are layed out properly in all the devices from iPhone 4 to iPhone 6 Plus. Can someone please suggest me a proper way of how i can create the XIBs that supports all the devices?
Apple has really some solid documentation on how to use autolayout and build dynamically sizing screens using constraints. Another solid tutorial to check out is this one from appcoda. Can be a little confusing at first but once you understand constraints making screens that look nice for all screen sizes is actually pretty straightforward
Currently, I'm working on universal app (iPhone / iPad) supported on iOS 7 & iOS 8.
Here is my problem regarding size classes :
My navigation bar is defined into a XiB file (NavBarView.xib)
Inside this file, I have a UIButton that I want to display only on iPhone mode, and a UISearchBar only for iPad mode.
To handle that whitout any line code, I used the new feature "Use size classes" available for views since iOS 8. I defined "size classes" for these two elements inside my XiB file.
UISearch for Ipad : Installed for all layouts except Compact Width / Any Height (wC hAny)
UIButton fo Iphone : Not installed for all layouts but with Compact Width / Any Height (wC hAny)
This mechanism works pretty fine on iOS 8 for iphone and ipad, but not on iOS 7. However, if I apply these size classes direclty into views contained into the storyboard, it works for iOS 7.
Could anyone explain me why my size classes are not working when they are defined into XiB files on iOS 7 ?
Best Regards and many thanks,
Lorenzo.
Barely anything to do with size classes is supported under iOS 7. Some good answers here: How can Xcode 6 adaptive UIs be backwards-compatible with iOS 7 and iOS 6?
Adding as an answer since saadnib's comment on the original question helped me a lot.
Size classes on XIB files not being backwards compatible is a bug that has been fixed on xCode 6.1.1. Strangely it's not on the patch notes but I can confirm I'm using a single xib to provide 2 different layouts for a cell on iPad and iPhone. This only started working once I updated from 6.0.1 to 6.1.1.
Limitations on backwards compatibility for classes on storyboards still apply, but they can be worked around.
Figured another option. Size classes will not work, if you add xibs view as subview to UIApplication.shared.keyWindow.
View must be in UIViewController view hierarchy to support size classes.
Thanks to #IvanKvyatkovskiy
I started one new iOS apllication. And that application requirement is app should support from iPhone 4 to iPhone 6 Plus. I am very much familiar with using Xib files. So far I differentiated my apps with iPhone 5 and below iPhone 5. For that I Used 2 Xib files for one is for iPhone 5 and other is iPhone 5 below according to device height I added like that. But now apple has relased iPhone 6 and iPhone 6 Plus with iOS 8 along with XCode 6. For these 4 types devices,
1) iPhone 4 2) iPhone 5 3) iPhone 6 and 4) iPhone 6 Plus do I need to add 4 Xibs or any other solution.
To learn Storyboards, now I don't have that much time because my app has already release date confirmed from Client. But I will learn about sotryboard in future definately.
I have tried with Autolayout concept, but its not worked for me. and I dont have full awarness on Autolayout concept also. Yesterday I started my new project with XCode 6, So I taken iPhone 6 view and tried to use autoresizing and autolayout but not worked for me and views are overlapping. I know for different devices creating different xibs is not good practice. For creating each device with each xib would take huge time. I am really bothering about this how to handle different devices from yesterday onwards. Please somebody help me to came out from this issue. Really highly thankful to you. If anything mistakes in my content please forgive me.
Your question deserves a longer answer than StackOverflow can provide, but there are a few pointers I can give you.
For each of your xibs, enable Size Classes and Autolayout.
Set each xib root view's size class to width Any and height Any, which I believe are the defaults.
Design your interface in a way that looks decent on this theoretical Any x Any device.
I highly recommend using a UIScrollView at the top level of any view controller's view hierarchy.
Use constraints to anchor the controls. I find it easiest to start with the control in the top left corner, anchor it to the containing view's top and left sides, and then work your way down and across until all of your controls are constrained on all 4 sides, or on one vertical and one horizontal size, along with explicit height and width. Be generous with the greater-than and less-than relationships in your constraints.
To customize for each device layout, switch the size class to the desired combination. Note that any constraints you add, change, or remove, as well as any controls that you add or remove, will be changed only for the current class size. Do this for each different size class that you're going to support. See Apple's reference for which size classes are used for each device.
Test your layouts using the Resizable Device simulators.
This is hard work, but it sure beats having to maintain a different xib for each device size.
Now app is supporting only 3.5 screen only . for 4 inch alignment is going wrongly.
IOS apps can work in both screens.
To ensure that the app runs on both screens 3.5 and 4 inch, you will have to apply either auto layout or auto resizing to the UI elements. Here are more details on how to handle Views for different screens and orientations. Check here
For an app to support orientations and multiple screen-sizes/devices the developer has to apply one of the following two;
1. Auto Resizing Mask (Springs & Struts)
2. Auto Layout
First one is fairly easy to use while Auto layout requires learning. With auto layout you can achieve almost anything but with the growing number of devices auto resizing mask can help only a little to support different devices.
Auto layout is the best way to support different devices and/or orientations.