UIKit:如何舍入和剪裁 UINavigationBar 的角?

UIKit: how can I round and clip the corners of a UINavigationBar?

我想把我的导航控制器栏的两个底角弄圆,所以它看起来像这样:

我试过这个:

final class RoundedNavigationController: UINavigationController {
    override func viewDidAppear(_ animated: Bool) {
        self.navigationBar.layer.cornerRadius = 20
        self.navigationBar.clipsToBounds = true
        self.navigationBar.layer.maskedCorners = [.layerMinXMaxYCorner,.layerMaxXMaxYCorner]
    }
}

但这是我得到的结果:

为什么安全区域部分也被裁剪了?

感谢您的帮助

Why does the safe area part get clipped too?

导航的边界顶部在状态栏的底部。导航栏的 绘图 向上延伸 超出 其边界进入“状态栏”区域(并到达屏幕顶部) .

因此,您不能将导航栏的 clipsToBounds 设置为 true,因为这样会破坏它的绘制方式。

更好的策略可能是构建导航栏的背景图像以使其看起来像您想要的那样。所以,例如,我能够得到这样的效果:

但是不是通过圆化图层角和裁剪。