如何为Tab Bar添加系统Home图标?
解决Tab Bar Item设置系统Home图标的问题
嘿,我之前也碰到过一模一样的困扰,给你几个简单直接的解决方案,帮你快速实现类似Instagram/Messenger的底部Tab Bar:
方法一:用SF Symbols(推荐,iOS 13+)
现在苹果官方推荐用SF Symbols来获取系统图标,其中的house和house.fill图标正好对应你要的Home样式(轮廓/填充两种状态,完美匹配社交APP的Tab Bar风格)。
在你的ViewController代码里添加以下设置(比如viewDidLoad方法中):
// 设置未选中状态的轮廓图标 tabBarItem.image = UIImage(systemName: "house")?.withRenderingMode(.alwaysOriginal) // 设置选中状态的填充图标 tabBarItem.selectedImage = UIImage(systemName: "house.fill")?.withRenderingMode(.alwaysOriginal) // 可选:设置文字颜色,贴合社交APP风格 tabBarItem.setTitleTextAttributes([.foregroundColor: UIColor.darkGray], for: .normal) tabBarItem.setTitleTextAttributes([.foregroundColor: UIColor.systemBlue], for: .selected)
这样设置后,图标会自动适配Tab Bar的尺寸,而且颜色也不会被系统默认渲染覆盖。
方法二:直接调用UIApplicationShortcutIconType.home的图标
如果你一定要用UIApplicationShortcutIconType.home对应的图标,可以通过代码生成对应的UIImage:
let homeShortcutIcon = UIApplicationShortcutIcon(type: .home) // 获取图标并设置渲染模式,避免灰色问题 tabBarItem.image = homeShortcutIcon.image.withRenderingMode(.alwaysOriginal) // 如果你需要选中状态的填充版,可能需要单独找对应的图标,因为快捷图标只有轮廓样式
解决自定义PNG显示灰色的问题
你之前添加PNG后显示灰色矩形,是因为Tab Bar Item默认会把图标设置为模板渲染模式(Template Rendering Mode),系统会自动覆盖图标原有颜色,只保留透明度。解决办法有两个:
- 直接在Xcode中修改图片属性:选中你的PNG图片,在右侧Attributes Inspector里,把「Render As」改成「Original Image」。
- 在代码里强制设置渲染模式:
tabBarItem.image = UIImage(named: "your-home-icon")?.withRenderingMode(.alwaysOriginal)
这样就能正常显示图片的原有颜色啦~
内容的提问来源于stack exchange,提问作者Andrew L.
相关产品推荐
相关产品推荐

