I am trying to change the height of a UIView based on which device the user is on. For example, I have created a view with an alpha of 25%. This view is pinned to the top, left, and right of the screen. I need the view to have a height of 44 when viewed on devices that have the cutout at the top (i.e. iPhone 11...etc.) and a height of 22 when viewed on devices that do not have the cutout (i.e. iPhone 8s Plus..etc.).
I am trying to accomplish this by using Vary for Traits in Xcode and not successful (I am sure it's because that is the wrong way to do it. LOL).
Please let me know if you need additional information or have any questions. I appreciate your time and help in advance.
Thank you,
mz
I don't understand either.
Most likeley, UIApplication.shared.delegate?.window. is nil
Could you check if UIApplication.shared.delegate is nil or not ?
Does the AppDelegate class contains this :
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
Are you running on simulator or device ?
I tested with 13.2 target, still works.
I may have found the difference.
Tested on a project with SceneDelegate.
And then, notch is false, even on X11 Pro.
So, I replaced by this extension:
extension UIDevice {
var hasNotch: Bool {
if #available(iOS 11.0, *) {
if UIApplication.shared.windows.count == 0 { return false } // Should never occur, but…
let top = UIApplication.shared.windows[0].safeAreaInsets.top
return top > 20 // That seem to be the minimum top when no notch…
} else {
// Fallback on earlier versions
return false
}
}
}
Credit:
h ttps://www.reddit.com/r/swift/comments/cap2r4/how_to_access_uiwindow_from_scenedelegate_in_ios/
That seems to work.