消除UINavigationBar和UIVisualEffectView之间的明显模糊边缘

10

目前,我的视图层次结构包括一个UIViewController(而不是UITableViewController),在其中嵌套了一个UITableView,并且有一个UIVisualEffectView(设置为Extra Light)在UITableView前面,与UINavigationBar底部对齐。我想实现的效果与App Store的分段视图有些相似。

但是,我注意到在导航栏和UIVisualEffectView之间的边界处出现了奇怪的模糊边缘,使得视图看起来不一致,如下图所示(由红圆圈标出):

enter image description here

最理想的情况是,UIVisualEffectView能够与UINavigationBar的模糊效果完美地融合。

谢谢。


为什么不使用纯色背景?你的截图看起来就是这样,背景里好像什么也没有。 - Wain
如果我在导航栏和效果视图中添加背景视图,那么这将使得模糊效果视图失去意义。在iOS 7及以上版本中,表格视图实际上是通过半透明的导航栏可见的。 - Pan Ziyue
2
我不得不解决我正在开发的一个应用程序中相同的问题。对我来说,问题出在 tabBar 上以及附加到其顶部的 blurView 和固定在导航栏底部的表格部分标题。解决方案是使 UITabBar 透明(而不是半透明->没有背景),并向下延伸 blurView,以填充 tabBar 占用的空间。如果您需要有关如何使栏透明的代码示例,请告诉我。 :) - 恐怕您无法在 UIBar 上设置标志,使其与 UIVisualEffectViews 在边缘处“混合”。虽然我很想被证明是错误的。 - CodingMeSwiftly
@Cabus,您介意将您的评论添加为答案吗?这种方法效果非常好! - Pan Ziyue
我一有时间就会去做,希望明天前能完成 :) - CodingMeSwiftly
显示剩余2条评论
2个回答

2

尝试使用UIToolBar代替UIVisualEffectView作为段落的背景。导航栏具有透明的背景而不是模糊效果。 UIToolBar具有与导航栏相同的半透明背景,因此在边缘处看起来无缝。


我最初在制作这个屏幕时尝试使用UIToolBar,但不幸的是,我无法使所需长度的UISegmentedControl适应UIToolBar(我希望分段控件适应工具栏,并在左右边缘留下大约16个点)。因此,最终我选择了UIVisualEffectView。 - Pan Ziyue
UIVisualEffectView永远无法满足您的需求,因为它没有半透明导航栏的相同视觉效果。您最好考虑在工具栏中调整UISegmentedControl的大小。一种方法是在每个侧面使用可伸缩间隔器来居中控件,然后在代码中设置正确的大小。 - Fujia
这确实是最好的解决方案,虽然不是“漂亮”的,但它足够简单并且有效。谢谢。 - Vin Gazoil

1
看了你的图片,似乎你的问题不是由于 UINavigationBar,而是由于你添加了 UISegmentedControl 的视图。 我不知道你的结构,但可能是 tableHeaderViewself.tableView.tableHeaderView),因此解决这个问题的一个合理方法是改变头部颜色:

代码示例:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        var headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
        header.contentView.backgroundColor = UIColor.clearColor()
        return header
}

我使用了这样的视图层次结构:UINavigationController > UIViewController(不是表视图控制器)> UITableView在表视图之上(因为我使用了标准的UIViewController作为基础),我添加了一个设置为Extra Light的UIVisualEffectView,并嵌套了一个UISegmentedControl - Pan Ziyue
我尝试去做,但我无法重现你的问题,你有 GitHub 或 Gist 或一些示例吗? - Alessandro Ornano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接