как установить пользовательский UIImage для элемента панели вкладок - PullRequest
0 голосов
/ 12 июля 2020
• 1000 1007 *
let ProfileImg: UIImageView = {
    let Img = UIImageView(image: UIImage(named: "PlaseHolder"))
        Img.layer.cornerRadius = 20
        Img.contentMode = .scaleAspectFit
        Img.clipsToBounds = true
        Img.layer.masksToBounds = true
        Img.translatesAutoresizingMaskIntoConstraints = false
    return Img
    }()

override func viewDidLoad() {
        super.viewDidLoad()

        fetchUser()

        }

       func fetchUser() {
        
        guard let uid = Auth.auth().currentUser?.uid else {return}
        let userRef = Database.database().reference(withPath: "users").child(uid)
        
        userRef.observeSingleEvent(of: .value, with: { (snapshot) in
            print(snapshot.value ?? "")
            
            let value = snapshot.value as? NSDictionary

            guard let profileImageUrl = value?["profileImageUrl"] as? String else {return}
            guard let url = URL(string: profileImageUrl) else { return }

            URLSession.shared.dataTask(with: url) { (data, response, err) in
                if let err = err {
                    print("unable to get profile image", err)
                }

                guard let data = data else {return}
                let image = UIImage(data: data)
                DispatchQueue.main.async {
                    self.tabBarItem.image = image?.withRenderingMode(.alwaysOriginal)
                    self.tabBarItem.selectedImage = image?.withRenderingMode(.alwaysOriginal)
                    
                }
                
            }.resume()
            
          }) { (err) in
              print("fail to fetch user", err)
          }
        
        }

и вот результат: iphone изображение симулятора изображение слишком велико для изображения элемента панели вкладок

но затем я нашел другой метод, я не смог его убить или получить, он добавил изображение, но я не удалось разместить его внутри панели вкладок + радиус угла не работает

extension UITabBarController {
    
    func addSubviewToLastTabItem(_ imageName: UIImage) {
        if let lastTabBarButton = self.tabBar.subviews.last, let tabItemImageView = lastTabBarButton.subviews.last {
            if let accountTabBarItem = self.tabBar.items?.first {
                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 = imageName
            self.tabBar.subviews.last?.addSubview(imgView)
        }
    }
}

и так это называется

 self.tabBarController?.addSubviewToLastTabItem(image!)

Результат: iphone изображение симулятора

пожалуйста, любая идея для выполнения sh это

1 Ответ

0 голосов
/ 16 июля 2020

Замените эту строку

imgView.frame = tabItemImageView.frame

на эту

imgView.frame = .init(x: lastTabBarButton.frame.origin.x / 6, y: 3, width: 28, height: 28)
...