在UISplitView的主视图中实现一个统一的UIBlurEffect[英] Achieve a Uniform UIBlurEffect in the Primary View of a UISplitView

本文是小编为大家收集整理的关于在UISplitView的主视图中实现一个统一的UIBlurEffect的处理方法,想解了在UISplitView的主视图中实现一个统一的UIBlurEffect的问题怎么解决?在UISplitView的主视图中实现一个统一的UIBlurEffect问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用带有开箱即用 Master 和 Detail 视图控制器的库存 UISplitViewController.在情节提要中,我已将 UIImageView 添加到 Detail 控制器集,以有效地用单个图像填充视图.

在 Master 控制器中,我使用以下内容来模糊该控制器的背景:

// In viewDidLoad

self.tableView.backgroundColor = [UIColor clearColor];
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
    UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc]
                                            initWithEffect:blurEffect];
    self.tableView.backgroundView = visualEffectView;
    self.tableView.separatorEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];

当 Master 控制器出现在 Detail 控制器上方时,请注意 Master 控制器的边缘如何在内边缘周围有一个暗阴影.

如何移除这些"阴影"以呈现均匀模糊?

拆分视图控制器

更多详情

UIPopoverSlidingChromeView

在 IB 中调试视图层次结构会显示一个名为 _UIPopoverSlidingChromeView 的 (private?) 视图.它有一个嵌入的灰色框架,这绝对是造成不均匀模糊外观的原因.

完全禁用模糊视图并离开 self.tableview.backgroundColor = [UIColor clearColor] 会显示 _UIPopoverSlidingChromeView 的灰色框.它看起来像这样:

渲染的 UIPopoverSlidingChromeView

关于在使用 UISplitViewController 时如何避免 _UIPopoverSlidingChromeView 有什么想法吗?

推荐答案

问题是它是一个私有类,你无法测试.

幸运的是_UIPopoverSlidingChromeView是UIPopoverBackgroundView的子类,它是公共的(因为在常规的popover实现流程中,客户端可以通过提供一个子类UIPopoverBackgroundView的类来自定义popover背景chrome).

for (UIView *subview in self.viewController.view.superview.superview.subviews) {
    if ([subview isKindOfClass:[UIPopoverBackgroundView class]]) {
        subview.alpha = 0.0;
    }
}

这应该隐藏 _UIPopoverSlidingChromeView.

本文地址:https://www.itbaoku.cn/post/924400.html