Last active
February 8, 2018 01:27
-
-
Save ha1f/884ce4870dc395639e86c4395f5ea947 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 案1 | |
extension UIView { | |
/// Returns UILayoutGuide compatible with safeAreaLayoutGuide. | |
/// `.safeAreaLayoutGuide` is available only iOS 11+, but safeAreaLayoutGuide | |
/// should be same as layoutguide of UIView under iOS 11. | |
/// | |
/// - returns safeAreaLayoutGuide or layoutGuide of self | |
func safeLayoutGuideOrSelfLayoutGuide() -> UILayoutGuide { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide | |
} else { | |
return UIViewLayoutGuideProxy(self) | |
} | |
} | |
} | |
private final class UIViewLayoutGuideProxy: UILayoutGuide { | |
private unowned var _base: UIView | |
init(_ view: UIView) { | |
self._base = view | |
super.init() | |
} | |
required init?(coder aDecoder: NSCoder) { | |
fatalError("UIViewLayoutGuideProxy cannot be instantiated from NSCoder. Use init(UIView) instead.") | |
} | |
override var leftAnchor: NSLayoutXAxisAnchor { | |
return _base.leftAnchor | |
} | |
override var topAnchor: NSLayoutYAxisAnchor { | |
return _base.topAnchor | |
} | |
override var bottomAnchor: NSLayoutYAxisAnchor { | |
return _base.bottomAnchor | |
} | |
override var rightAnchor: NSLayoutXAxisAnchor { | |
return _base.rightAnchor | |
} | |
override var widthAnchor: NSLayoutDimension { | |
return _base.widthAnchor | |
} | |
override var heightAnchor: NSLayoutDimension { | |
return _base.heightAnchor | |
} | |
override var leadingAnchor: NSLayoutXAxisAnchor { | |
return _base.leadingAnchor | |
} | |
override var trailingAnchor: NSLayoutXAxisAnchor { | |
return _base.trailingAnchor | |
} | |
override var centerXAnchor: NSLayoutXAxisAnchor { | |
return _base.centerXAnchor | |
} | |
override var centerYAnchor: NSLayoutYAxisAnchor { | |
return _base.centerYAnchor | |
} | |
} | |
// 案2 | |
extension UIView { | |
var safeLeftAnchor: NSLayoutXAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.leftAnchor | |
} else { | |
return leftAnchor | |
} | |
} | |
var safeRightAnchor: NSLayoutXAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.rightAnchor | |
} else { | |
return rightAnchor | |
} | |
} | |
var safeBottomAnchor: NSLayoutYAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.bottomAnchor | |
} else { | |
return bottomAnchor | |
} | |
} | |
var safeTopAnchor: NSLayoutYAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.topAnchor | |
} else { | |
return topAnchor | |
} | |
} | |
var safeWidthAnchor: NSLayoutDimension { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.widthAnchor | |
} else { | |
return widthAnchor | |
} | |
} | |
var safeHeightAnchor: NSLayoutDimension { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.heightAnchor | |
} else { | |
return heightAnchor | |
} | |
} | |
var safeCenterYAnchor: NSLayoutYAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.centerYAnchor | |
} else { | |
return centerYAnchor | |
} | |
} | |
var safeCenterXAnchor: NSLayoutXAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.centerXAnchor | |
} else { | |
return centerXAnchor | |
} | |
} | |
var safeLeadingAnchor: NSLayoutXAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.leadingAnchor | |
} else { | |
return leadingAnchor | |
} | |
} | |
var safeTrailingAnchor: NSLayoutXAxisAnchor { | |
if #available(iOS 11.0, *) { | |
return self.safeAreaLayoutGuide.trailingAnchor | |
} else { | |
return trailingAnchor | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment