Ios 6 and ios 7 adaptation issues, allowing the program to support both iOS 6 and iOS 7, setEdgesForExtendedLayout
For various reasons, our program needs to support both iOS 7 and earlier versions (such as iOS 6), that is, developers have to develop between iOS 7 and iOS 6 at the same time. In fact, developers hate this.
Layout problems in iOS 7
The following is a very simple program running on iOS 6:
If you run it on iOS 7 simulator, you will not see the label: <喎?http: www.bkjia.com kf ware vc " target="_blank" class="keylink"> VcD4KPHA + CjxpbWcgc3JjPQ = "http://www.2cto.com/uploadfile/Collfiles/20141025/2014102508564226.png" alt = "\">
Why? Let's take a look at its reveal:
As you can see, the label is actually behind the NavigationBar. In iOS 7, Apple introduced a new property called[UIViewController setEdgesForExtendedLayout:]
The default value isUIRectEdgeAll
. When your container is a navigation controller, the default layout starts from the top of the navigation bar. This is why all the UI elements drift up 44pt.
The quick way to fix this problem is- (void)viewDidLoad
Add the following line of code:
1 |
self.edgesForExtendedLayout = UIRectEdgeNone;
|
In this way, the problem is fixed.
IOS 6 running exception
If you run a program on iOS 6, the following exception occurs:
1 |
[LAViewController setEdgesForExtendedLayout:]: unrecognized selector sent to instance 0x778a210
|
All the APIs that can only be run in iOS 7 need to be re-encapsulated, as shown in the following code:
1234 |
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]){ self.edgesForExtendedLayout = UIRectEdgeNone;}
|
Xcode 4 Compilation Error
Some machines may still use Xcode 4.6. When using 4.6 to compile code, the following compilation error occurs:
12 |
Property 'edgesForExtendedLayout' not found on object of type 'LAViewController *'Use of undeclared identifier 'UIRectEdgeNone'
|
To avoid this error, you can create the following macro:
123 |
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000#define IOS7_SDK_AVAILABLE 1#endif
|
Then, wrap the iOS 7 code as needed:
123 |
#ifdef IOS7_SDK_AVAILABLE...#endif
|
Inconsistent UILabel background
For UILabel, in iOS 7, its background color is clearColor by default, while in iOS 6, the background color is white by default. Therefore, we 'd better set the label's background color in the Code:
1 |
view.backgroundColor = [UIColor clearColor];
|
Hide the status bar in full screen mode
In iOS 6, whenpresentViewController
The default modal screen will be full screen (UIModalPresentationFullScreen
). To achieve the same effect in iOS 7, we can add the following code in modal controller:
1234 |
- (BOOL)prefersStatusBarHidden{ return YES;}
|
UIToolbar barStyle
Sometimes we can combine the UIToolbar with the system keyboard. In iOS 6, the keyboard is dark, and the style of the toolbar is similar, as shown in the following code:
1 |
self.barStyle = UIBarStyleBlack;// or UIBarStyleBlackTranslucents
|
In iOS 7, the keyboard changes to a brighter color, so we need to set different bar styles based on different iOS versions.
12345678 |
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending){ self.barStyle = UIBarStyleDefault;}else{ self.barStyle = UIBarStyleBlack;//or UIBarStyleBlackTranslucent}
|
More
The above skills are what I have encountered in development, and there are certainly more skills. If you know, let me know.
Finally, let's take a look at the differences: