Popover тень ушла с iOS 13 - PullRequest
       7

Popover тень ушла с iOS 13

2 голосов
/ 18 октября 2019

На устройствах под управлением iOS 13 тень всплывающего окна больше не отображается. Это происходит, когда всплывающее окно отображается на ViewController, который содержит пользовательский UIView со слоем поддержки CAEAGLLayer непосредственно под ним.

Я знаю, что CAEAGLLayer устарел в iOS 13, но должен быть способ решить эту проблему.

Достаточно забавно, когда вы делаете снимок экрана, чтобы показать здесь проблему, тень появляется на скриншоте! Так странно ...

enter image description here

Я попытался создать пользовательский UIPopoverBackgroundView, и набор теней в нем работал нормально.

UIPopoverPresentationController *popoverController = viewController.popoverPresentationController;
popoverController.permittedArrowDirections = UIPopoverArrowDirectionDown;
popoverController.popoverBackgroundViewClass = [PopoverBackgroundView class];

enter image description here

Любые советы или идеи будут с благодарностью! Я провел весь день, пытаясь понять это. : /

1 Ответ

1 голос
/ 18 октября 2019

Ну, для тех, кто сталкивался с чем-то подобным, я смог исправить временное исправление, используя следующий метод внутри метода viewWillDisplay контроллера представления.

+ (void)fixShadowForViewController:(UIViewController*)viewController
{
    if (viewController.popoverPresentationController)
    {
        NSOperatingSystemVersion ios13 = (NSOperatingSystemVersion){13, 0, 0};
        if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios13])
        {
           UIView *popoverView = viewController.popoverPresentationController.containerView;
           popoverView.layer.shadowColor = [UIColor blackColor].CGColor;
           popoverView.layer.shadowOpacity = 0.16f;
           popoverView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
           popoverView.layer.shadowRadius = 32.0f;
        }
        else
        {
            // The arrow doesn't get colored properly on iOS 12 and lower so we take the background
            // color of the view controller and apply it to make it match.
            viewController.popoverPresentationController.backgroundColor = viewController.view.backgroundColor;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...