tabItem 上的图像,UIKit UITabBarController

问题描述 投票:0回答:2

您好,我正在使用 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)
        }
    }
}

有人可以帮我做吗?

uikit
2个回答
0
投票

你添加第二部分代码了吗:

 let yourImage = UIImage(named: "your-image")

 override func viewDidLayoutSubviews() { // add to any vc
 super.viewDidLayoutSubviews()

 tabBarController?.addSubviewToLastTabItem(yourImage) 
 }

当您调用 addSubviewToLastTabItem("String") 时,正确打印参数而不出现错误至关重要。

您可以发布这部分代码吗?

如果你旋转 iPhone,viewDidLayoutSubviews 还会起作用,请仔细检查你是否在 viewDidLoad() 中调用 addSubviewToLastTabItem()


0
投票

就像将图像设置为

UITabBarItem
一样简单,唯一需要注意的是,您需要确保图像的渲染模式设置为始终原始(
[UIImage.RenderingMode.alwaysOriginal][1]
),否则图像将被视为模板并着色根据您在
UITabBar

上使用的色调

例如,在 UIViewController 上,您需要执行以下操作:

let avatar = imageReceivedFromUrl.withRenderingMode(.alwaysOriginal)
self.tabBarItem.image = avatar
self.tabBarItem.selectedImage = avatar
© www.soinside.com 2019 - 2024. All rights reserved.