Попытка перезагрузить collectionView для SupplementaryViewOfKind: UICollectionElementKindSectionHeader с помощью didset
Я пытаюсь обновить изображение профиля моего пользователя после того, как он выбрал новое изображение профиля. Я использую imagepickercontroller, все работает нормально, но изображение не обновляется сразу... приложение должно быть перезапущено, чтобы оно могло показать...
Мне также любопытно, как обновить заголовок, потому что я видел различные примеры здесь, но они для ячеек и элементов, которых у меня нет. У меня просто есть несколько ярлыков и изображение.
в своей ячейке просмотра коллекции я использую didset.
var user: User? {
didSet {
guard let profileImageUrl = user?.profileImageUrl else {return}
profileImageView.loadImage(urlString: profileImageUrl)
}
}
когда я получаю пользователя и заголовок
fileprivate func fetchUser() {
let uid = userId ?? (Auth.auth().currentUser?.uid ?? "")
Database.fetchUserWithUID(uid: uid) { (user) in
self.user = user
self.navigationItem.title = self.user?.username
self.collectionView?.reloadData()
self.paginatePosts()
self.collectionView?.collectionViewLayout.invalidateLayout()
}
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "headerId", for: indexPath) as! UserProfileHeader
header.user = self.user
header.delegate = self
return header
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: view.frame.width, height: 250)
}
когда я выбираю и выбираю изображение
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
print("123")
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
profileImageView.image = editedImage
guard let uploadDate = UIImageJPEGRepresentation(editedImage, 0.3) else {return}
let filename = NSUUID().uuidString
guard let currentUser = Auth.auth().currentUser?.uid else {return}
let storageItem = Storage.storage().reference().child("profile_Image").child(filename).child(currentUser)
storageItem.putData(uploadDate, metadata: nil) { (metadata, err) in
if let err = err {
print("err",err)
return
}
storageItem.downloadURL(completion: { (downloadURL, err) in
let profileImageUrl = downloadURL?.absoluteString
print("successfullly stored image edited", profileImageUrl)
if let profilePhotoUrl = profileImageUrl {
let newphotoprofilevalues = ["profileImageUrl": profilePhotoUrl]
Database.database().reference().child("users").child(currentUser).updateChildValues(newphotoprofilevalues, withCompletionBlock: { (err, ref) in
print("error", err)
return
})
print("updated")
DispatchQueue.main.async {
let indextSet = IndexSet(integer: 0)
self.collectionView?.reloadSections(indextSet)
self.collectionView?.collectionViewLayout.invalidateLayout()
}
}