您好,我正在使用 uikit 制作一个应用程序,我想在选项卡栏项目上设置个人资料图像(从 url 接收)。我期待 TabBarItem 上更新的个人资料图像。另外,我想在选择选项卡时在图像周围添加边框。
我找到了这个解决方案,但图像没有出现在选项卡中。 在选项卡栏项目上设置用户的个人资料图片
extension UITabBarController {
func addSubviewToLastTabItem(_ image: UIImage) {
if let lastTabBarButton = self.tabBar.subviews.last, let tabItemImageView = lastTabBarButton.subviews.first {
if let accountTabBarItem = self.tabBar.items?.last {
accountTabBarItem.selectedImage = nil
accountTabBarItem.image = nil
}
let imgView = UIImageView()
imgView.frame = tabItemImageView.frame
imgView.layer.cornerRadius = tabItemImageView.frame.height/2
imgView.layer.masksToBounds = true
imgView.contentMode = .scaleAspectFill
imgView.clipsToBounds = true
imgView.image = image
self.tabBar.subviews.last?.addSubview(imgView)
}
}
}
有人可以帮我做吗?
你添加第二部分代码了吗:
let yourImage = UIImage(named: "your-image")
override func viewDidLayoutSubviews() { // add to any vc
super.viewDidLayoutSubviews()
tabBarController?.addSubviewToLastTabItem(yourImage)
}
当您调用 addSubviewToLastTabItem("String") 时,正确打印参数而不出现错误至关重要。
您可以发布这部分代码吗?
如果你旋转 iPhone,viewDidLayoutSubviews 还会起作用,请仔细检查你是否在 viewDidLoad() 中调用 addSubviewToLastTabItem()
就像将图像设置为
UITabBarItem
一样简单,唯一需要注意的是,您需要确保图像的渲染模式设置为始终原始([UIImage.RenderingMode.alwaysOriginal][1]
),否则图像将被视为模板并着色根据您在 UITabBar
上使用的色调
例如,在 UIViewController 上,您需要执行以下操作:
let avatar = imageReceivedFromUrl.withRenderingMode(.alwaysOriginal)
self.tabBarItem.image = avatar
self.tabBarItem.selectedImage = avatar