Daltron / NotificationBanner

The easiest way to display highly customizable in app notification banners in iOS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Screen flicker on ios 17

nigeshvenu opened this issue · comments

Screen flickering after banner dismiss when there is keyboard in the viewcontroller

Same happens to me :(

But only if you show the banner on top and not always, if you show at bottom nothing happens :|

Flicks is related to this lines;

appWindow?.windowLevel = UIWindow.Level.normal

I have commented everything related to this window level and now is all good, but i dont know if this will have side effects.

It seems that adjusting the window level by setting it to UIWindow.Level.statusBar + 1 while showing the banner and then resetting it to UIWindow.Level.normal upon dismissal is causing the issue. I have commented out these lines for now to maintain the default window level. Hope an update will available in the near future.

Flicks is related to this lines;

appWindow?.windowLevel = UIWindow.Level.normal

I have commented everything related to this window level and now is all good, but i dont know if this will have side effects.

I commented it out in all three places in the BaseNotificationBanner.swift class and everything seems to be working well now, thanks @nigeshvenu.

I didn't put in a PR because I'm not sure if this affects anything for other use cases other than how I'm using it on the top level.

For others experiencing this issue:

Lines 401, 406:

        if let parentViewController = parentViewController, parentViewController.view != nil {
            parentViewController.view.addSubview(self)
            if statusBarShouldBeShown() {
                //appWindow?.windowLevel = UIWindow.Level.normal
            }
        } else {
            appWindow?.addSubview(self)
            if statusBarShouldBeShown() && !(parentViewController == nil && bannerPosition == .top) {
                //appWindow?.windowLevel = UIWindow.Level.normal
            } else {
                appWindow?.windowLevel = UIWindow.Level.statusBar + 1
            }
        }

Line 610:

        self.bannerQueue.showNext(callback: { (isEmpty) in
            if isEmpty || self.statusBarShouldBeShown() {
                //self.appWindow?.windowLevel = UIWindow.Level.normal
            }
        })