You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现UITabBar背景透明,解决自定义弧形TabBar中间按钮下方留白问题

解决方案

你遇到的问题由两个原因导致:一是UITabBar默认自带的系统私有背景视图未被完全清空,二是自定义贝塞尔路径的形状错误,将中间空缺区域也纳入了填充范围。按照以下步骤修改即可:


步骤1:清空系统默认背景

UITabBar默认自带UIBarBackground私有视图,仅设置backgroundColor = .clear无法完全清除,需要额外清空其背景图与阴影图。在自定义DesignerTab类中添加初始化方法统一配置:

@IBDesignable
class DesignerTab: UITabBar {
    private var shapeLayer: CALayer?

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }

    private func commonInit() {
        // 清空系统默认背景相关配置
        backgroundImage = UIImage()
        shadowImage = UIImage()
        isTranslucent = true
        backgroundColor = .clear
    }

    // 原有其他方法保留
}

同时删除draw(_ rect: CGRect)方法中重复的属性配置,draw方法仅保留调用addShape()的逻辑即可。


步骤2:修正贝塞尔路径形状

你当前的路径将中间区域向下凸出,纳入了填充范围,导致中间显示白色填充。调整路径的y轴方向,让中间区域向上凹陷,不在填充范围内:

func createPath() -> CGPath {
    // 凹陷深度,方向向上超出tabbar顶部
    let depth: CGFloat = 27
    let path = UIBezierPath()
    let centerX = self.frame.width / 2

    path.move(to: CGPoint(x: 0, y: 0))
    // 到中间凹陷左侧起点
    path.addLine(to: CGPoint(x: centerX - depth * 2 + 10, y: 0))

    // 凹陷左侧曲线
    path.addCurve(to: CGPoint(x: centerX, y: -depth),
                  controlPoint1: CGPoint(x: centerX - 30, y: 0),
                  controlPoint2: CGPoint(x: centerX - 25, y: -depth))

    // 凹陷右侧曲线
    path.addCurve(to: CGPoint(x: centerX + depth * 2 - 10, y: 0),
                  controlPoint1: CGPoint(x: centerX + 25, y: -depth),
                  controlPoint2: CGPoint(x: centerX + 30, y: 0))

    // 绘制剩余tabbar区域
    path.addLine(to: CGPoint(x: self.frame.width, y: 0))
    path.addLine(to: CGPoint(x: self.frame.width, y: self.frame.height))
    path.addLine(to: CGPoint(x: 0, y: self.frame.height))
    path.close()

    return path.cgPath
}

修改后shapeLayer仅会填充左右两侧的TabBar区域,中间凹陷位置不会被填充,自然呈现透明效果。


额外说明

你之前添加的全局UITabBar外观配置、ViewController中的背景色设置代码均可删除,所有配置在自定义TabBar类中处理即可,避免重复配置冲突。

内容的提问来源于stack exchange,提问作者Rj19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:09:01