@@ -23,6 +23,7 @@ final class SelectedPhotoInputItemsPreviewWindow: BottomSheetView {
2323 private var selectedAssets = [ PHAsset] ( )
2424 private var lastWidth : CGFloat = 0
2525 private var isSending = false
26+ private var cellSizeCache = [ String: CGSize] ( )
2627
2728 override func awakeFromNib( ) {
2829 super. awakeFromNib ( )
@@ -96,7 +97,7 @@ extension SelectedPhotoInputItemsPreviewWindow: UICollectionViewDataSource {
9697 let cell = collectionView. dequeueReusableCell ( withReuseIdentifier: R . reuseIdentifier. media_preview, for: indexPath) !
9798 if indexPath. item < assets. count {
9899 let asset = assets [ indexPath. item]
99- cell. load ( asset: asset)
100+ cell. load ( asset: asset, size : cellSizeForItemAt ( indexPath . item ) )
100101 cell. updateSelectedStatus ( isSelected: selectedAssets. contains ( asset) )
101102 }
102103 return cell
@@ -107,7 +108,7 @@ extension SelectedPhotoInputItemsPreviewWindow: UICollectionViewDataSource {
107108extension SelectedPhotoInputItemsPreviewWindow : UICollectionViewDelegate , UICollectionViewDelegateFlowLayout {
108109
109110 func collectionView( _ collectionView: UICollectionView , layout collectionViewLayout: UICollectionViewLayout , sizeForItemAt indexPath: IndexPath ) -> CGSize {
110- MediaPreviewCell . cellSize
111+ cellSizeForItemAt ( indexPath . item )
111112 }
112113
113114 func collectionView( _ collectionView: UICollectionView , didSelectItemAt indexPath: IndexPath ) {
@@ -178,4 +179,20 @@ extension SelectedPhotoInputItemsPreviewWindow {
178179 sendFileButton. isEnabled = isEnabled
179180 }
180181
182+ private func cellSizeForItemAt( _ index: Int ) -> CGSize {
183+ guard index < assets. count else {
184+ return . zero
185+ }
186+ let asset = assets [ index]
187+ if let size = cellSizeCache [ asset. localIdentifier] {
188+ return size
189+ } else {
190+ let height : CGFloat = 312
191+ let width : CGFloat = ceil ( height / CGFloat( asset. pixelHeight) * CGFloat( asset. pixelWidth) )
192+ let size = CGSize ( width: min ( 312 , max ( width, 120 ) ) , height: height)
193+ cellSizeCache [ asset. localIdentifier] = size
194+ return size
195+ }
196+ }
197+
181198}
0 commit comments