Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
extension UIHostingController {
convenience public init(rootView: Content, ignoreSafeArea: Bool) {
self.init(rootView: rootView)
if ignoreSafeArea {
disableSafeArea()
}
}
func disableSafeArea() {
guard let viewClass = object_getClass(view) else { return }
let viewSubclassName = String(cString: class_getName(viewClass)).appending("_IgnoreSafeArea")
if let viewSubclass = NSClassFromString(viewSubclassName) {
object_setClass(view, viewSubclass)
}
else {
guard let viewClassNameUtf8 = (viewSubclassName as NSString).utf8String else { return }
guard let viewSubclass = objc_allocateClassPair(viewClass, viewClassNameUtf8, 0) else { return }
if let method = class_getInstanceMethod(UIView.self, #selector(getter: UIView.safeAreaInsets)) {
let safeAreaInsets: @convention(block) (AnyObject) -> UIEdgeInsets = { _ in
return .zero
}
class_addMethod(viewSubclass, #selector(getter: UIView.safeAreaInsets), imp_implementationWithBlock(safeAreaInsets), method_getTypeEncoding(method))
}
if let method2 = class_getInstanceMethod(viewClass, NSSelectorFromString("keyboardWillShowWithNotification:")) {
let keyboardWillShow: @convention(block) (AnyObject, AnyObject) -> Void = { _, _ in }
class_addMethod(viewSubclass, NSSelectorFromString("keyboardWillShowWithNotification:"), imp_implementationWithBlock(keyboardWillShow), method_getTypeEncoding(method2))
}
objc_registerClassPair(viewSubclass)
object_setClass(view, viewSubclass)
}
}
}
@vBoykoGit

This comment has been minimized.

Copy link

@vBoykoGit vBoykoGit commented Oct 9, 2020

Don't forget to add , ignoreSafeArea: true in your UIHostingController initializer.

@triage

This comment has been minimized.

Copy link

@triage triage commented Dec 27, 2020

THANK YOU for this

@nikndr

This comment has been minimized.

Copy link

@nikndr nikndr commented Jan 12, 2021

Man, you just saved my day. Thank you!

@schwjustin

This comment has been minimized.

Copy link

@schwjustin schwjustin commented Jan 21, 2021

Thank you! Also, as @vBoykoGit mentioned, don't forget to add ignoreSafeArea: true!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment