在运行iOS 13的设备上,不再显示弹出阴影。当弹出窗口显示在包含自定义UIView的ViewController上时,就会发生这种情况,该UIView的正下方有一个CAEAGLLayer支持层。
我知道iOS 13中已弃用CAEAGLLayer,但必须有一种解决方法。
拍摄屏幕快照时,很有趣,可以在此处显示屏幕快照中出现阴影的问题!太奇怪了...
我尝试创建自定义UIPopoverBackgroundView,并且其中设置的阴影效果很好。
UIPopoverPresentationController *popoverController = viewController.popoverPresentationController;
popoverController.permittedArrowDirections = UIPopoverArrowDirectionDown;
popoverController.popoverBackgroundViewClass = [PopoverBackgroundView class];
任何提示或想法将不胜感激!我花了一整天的时间试图弄清楚这一点。 :/
答案 0 :(得分:1)
好吧,对于那些遇到类似问题的人,我可以通过在视图控制器的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;
}
}
}