Is enabling Safe Area Layout Guides compatible to iOS below 11?
相关问题
- Core Data lightweight migration crashes after App
- How can I implement password recovery in an iPhone
- State preservation and restoration strategies with
- “Zero out” sensitive String data in Swift
- Get the NSRange for the visible text after scroll
相关文章
- 现在使用swift开发ios应用好还是swift?
- UITableView dragging distance with UIRefreshContro
- TCC __TCCAccessRequest_block_invoke
- Where does a host app handle NSExtensionContext#co
- xcode 4 garbage collection removed?
- Oracle equivalent of PostgreSQL INSERT…RETURNING *
- Xcode: Is there a way to change line spacing (UI L
- Unable to process app at this time due to a genera
I managed to work with the new Safe Area layout guides and maintain backwards compatibility with iOS 9 and iOS 10: (EDIT: as pointed out in the comments by @NickEntin, this implementation will presume there is a status bar present, which won't be true in landscape on the iPhone X. Resulting in to much space to the top (20 points). It will run perfectly fine however.
E.g. if you want a view to be 10 points below the status bar (and 10 points below the sensor housing on iPhone X):
File Inspector
and enable the safe are by checkingUse Safe Area Layout Guides
.>=
(greater than or equal) constraint, constant30
(30 because we want 10 points spacing to the status bar which is 20 points high) and priorityHigh
(750).=
(equal) constraint, constant10
and priorityLow
(250).The same can be done for a view at the bottom (and for leading/trailing or left/right to the Safe Area):
File Inspector
and enable the safe are by checkingUse Safe Area Layout Guides
.>=
(greater than or equal) constraint, constant10
and priorityHigh
(750).=
(equal) constraint, constant10
and priorityLow
(250).I have backward compatibility issues with WKWebView & Safe Area on iOS 9. By some reason, WKWebView simply ignores safe area layout settings.
If you use xibs without storyboard then they don't have layout guides on ios 10. So move xib to storyboard to have backward compatibility.
The backwards compatibility of Safe Areas for iOS 9 & iOS 10 only works if you are using storyboards. If you are using xibs, there is no layout guide to fall back to. https://forums.developer.apple.com/thread/87329
The workarounds seem to be either
(a) migrate your xibs into storyboards, or
(b) add some additional constraints programmatically.
If (a) is not really an option, the manual approach will be something like this:
Assuming you have a view in your xib that you want to keep within the safe area (i.e. below any status bar or navigation bar).
Add constraints in your xib between your view and the safe area for iOS 11. Assign the top constraint to a priority of 750.
In your view controller, add a property:
And then in viewDidLayoutSubviews:
The new constraint will only be created for iOS 9 & iOS 10, has a default priority of 1000, and overrides the one in the xib.
Repeat for a bottom constraint if you need to avoid the home indicator.
Swift 4 version:
In Objective-C for top and bottom margin when on iPhone-X
"safe area layout guide" is backward compatible. Well, unless you use it in xib. With storyboard it seems ok.
I solved my problem by accessing the "Top layout constraint" from the first object at the top of my view.
then, I changed the Constant value to that constraint and refresh the view. For example, if you use a navigation bar (44 height) plus the status bar (20 height) :
With SYSTEM_VERSION_LESS_THAN which is defined like that :