How to correct Tab Bar height issue on iPhone X
On iOS 12.1 I've solved this issue by overriding safeAreaInsets in the UITabBar subclass:
class TabBar: UITabBar { private var cachedSafeAreaInsets = UIEdgeInsets.zero override var safeAreaInsets: UIEdgeInsets { let insets = super.safeAreaInsets if insets.bottom < bounds.height { cachedSafeAreaInsets = insets } return cachedSafeAreaInsets }}
For iOS 13.0 onward,
class TabBar: UITabBar { private var cachedSafeAreaInsets = UIEdgeInsets.zero let keyWindow = UIApplication.shared.connectedScenes .filter { $0.activationState == .foregroundActive } .compactMap { $0 as? UIWindowScene } .first?.windows .filter { $0.isKeyWindow } .first override var safeAreaInsets: UIEdgeInsets { if let insets = keyWindow?.safeAreaInsets { if insets.bottom < bounds.height { cachedSafeAreaInsets = insets } } return cachedSafeAreaInsets }}
Create a separate file with the following code:
extension UITabBar { override open func sizeThatFits(_ size: CGSize) -> CGSize { super.sizeThatFits(size) guard let window = UIApplication.shared.keyWindow else { return super.sizeThatFits(size) } var sizeThatFits = super.sizeThatFits(size) sizeThatFits.height = window.safeAreaInsets.bottom + 40 return sizeThatFits }}