4

我正在使用UISplitViewController带有开箱即用MasterDetail视图控制器的库存。在情节提要中,我UIImageViewDetail控制器集添加了一个以有效地用单个图像填充视图。

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在内边缘周围有一个暗阴影。

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

拆分视图控制器

更多细节

UIPopover滑动Chrome查看

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

完全禁用模糊视图,只留下self.tableview.backgroundColor = [UIColor clearColor]显示_UIPopoverSlidingChromeView的灰色框架。它看起来像这样:

渲染的 UIPopoverSlidingChromeView

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

4

2 回答 2

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;
于 2014-12-14T15:30:04.290 回答
1

问题是它是一个你无法测试的私有类。

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

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

这应该隐藏_UIPopoverSlidingChromeView.

于 2016-05-28T20:11:08.717 回答