问题描述
我正在使用带有开箱即用 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 控制器的边缘如何在内边缘周围有一个暗阴影.
如何移除这些"阴影"以呈现均匀模糊?
更多详情
在 IB 中调试视图层次结构会显示一个名为 _UIPopoverSlidingChromeView 的 (private?) 视图.它有一个嵌入的灰色框架,这绝对是造成不均匀模糊外观的原因.
完全禁用模糊视图并离开 self.tableview.backgroundColor = [UIColor clearColor] 会显示 _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.