Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/Signal/src/ViewControllers/MediaGallery/SquareMediaTileViewLayout.swift
1 views
//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import SignalServiceKit
import UIKit

class SquareMediaTileViewLayout: UICollectionViewFlowLayout, ScrollPositionPreserving {
    private var contentSizeBeforeInsertingToTop: CGSize?

    override init() {
        super.init()

        let interItemSpacing = 2.0
        minimumInteritemSpacing = interItemSpacing
        minimumLineSpacing = interItemSpacing
    }

    required init?(coder: NSCoder) {
        owsFail("init(coder:) has not been implemented")
    }

    func recordContentSizeBeforeInsertingToTop() {
        contentSizeBeforeInsertingToTop = collectionViewContentSize
    }

    override func prepare() {
        super.prepare()

        if let collectionView, let oldContentSize = contentSizeBeforeInsertingToTop {
            let newContentSize = collectionViewContentSize
            collectionView.contentOffset.y += newContentSize.height - oldContentSize.height
            contentSizeBeforeInsertingToTop = nil
        }
    }
}