在UISplitView的主视图中实现统一的UIBlurEffect

时间:2014-10-02 16:12:58

标签: ios ios9 uisplitviewcontroller uisplitview uiblureffect

我正在使用具有开箱即用UISplitViewControllerMaster视图控制器的股票Detail。在故事板中,我在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控制器边缘内边缘周围是否有阴影。

如何删除这些“阴影”以改为呈现均匀模糊?

Split View Controller

更多细节

UIPopoverSlidingChromeView

在IB中调试视图层次结构会显示一个名为_UIPopoverSlidingChromeView的(私有?)视图。它有一个嵌入的灰色框架,它肯定是造成非均匀模糊外观的原因。

完全禁用模糊视图,只需离开self.tableview.backgroundColor = [UIColor clearColor]即可显示_UIPopoverSlidingChromeView的灰框。它看起来像这样:

Rendered UIPopoverSlidingChromeView

有关使用_UIPopoverSlidingChromeView时如何避免UISplitViewController的任何想法?

2 个答案:

答案 0 :(得分:3)

    //как убрать дурацкий прямоугольник при прозрачном фоне maser окна в режиме UISplitViewControllerDisplayModeOverlay
    CALayer* v_1 =  self.view.superview.superview.superview.layer.sublayers[0];
    CALayer* v_2=v_1.sublayers[0];
    v_2.borderWidth=0;

答案 1 :(得分:1)

问题在于它是一个你无法测试的私人课程。

幸运的是_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