Пытаюсь сделать Карусель на UIKit (без подов или SwiftUI) с показом ОДНОЙ ячейки за раз, при этом Image не на всю ширину CollectionView по ширине (либо длине также)

pagecontrol
swift
xcode
ios
uicollectionview

#1

1) Я пытаюсь сделать Carousel с PageControl на UIKit с показом одной ячейки за раз, при этом изображение должно быть меньше ширины CollectionView, и я не хочу использовать какие-либо Pods или SwiftUI. Интересно и нужно найти решение.
Page Control я пока не приколачивал в коде.

2) И есть проблем что когда возвращаюсь по карусели обратно до 1-ой картинки, первая картинка теряет отступ слева (то это вторичное, главное прошу помочь хоть с первым главное!).

ЭТО МОЙ РЕЗУЛЬТАТ (.gif)
click to see gif on Imgur

Уверен очень многим будет полезно, так как видел много таких вопросов!

Либо может быть кто-то даст подсказку либо ссылку на нужное решение?
Я все изучу, разберусь и наберусь опыта

Заранее благодарю!)

Мой код CollectionView:

class TopGalleryCollectionView: UICollectionView, UICollectionViewDelegate, UICollectionViewDataSource {

var channels: [TopGalleryModel] = []

init() {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    super.init(frame: .zero, collectionViewLayout: layout)
    
    backgroundColor = #colorLiteral(red: 0.113761507, green: 0.1048973277, blue: 0.150441885, alpha: 1)
    delegate = self
    dataSource = self
    register(TopGalleryCollectionViewCell.self, forCellWithReuseIdentifier: TopGalleryCollectionViewCell.reuseId)
    
    translatesAutoresizingMaskIntoConstraints = false
    
    layout.minimumLineSpacing = Constants.galleryMinimumLineSpacing
    
    // и св-во CollectionView, которое отвечает за принятие отступов
    contentInset = UIEdgeInsets(top: 0, left: Constants.leftDistanceToView, bottom: 0, right: Constants.rightDistanceToView)
    
    showsHorizontalScrollIndicator = false
    showsVerticalScrollIndicator = false
    isPagingEnabled = true
}

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

// MARK: - Data Source

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return channels.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = dequeueReusableCell(withReuseIdentifier: TopGalleryCollectionViewCell.reuseId, for: indexPath) as! TopGalleryCollectionViewCell
    cell.mainImageView.image = channels[indexPath.row].coverImage
    cell.nameOfChannel.text = channels[indexPath.row].nameOfChannel
    cell.numberOfSubscribers.text = channels[indexPath.row].numberOfSubscribers
    return cell
}

// MARK: - Filling with content

func setContentFor(channels: [TopGalleryModel]) {
    self.channels = channels
}
// будем вызывать ее там, от куда мы будем получать наши данные. В нашем случае мы будем получать их в файле ViewController

}

extension TopGalleryCollectionView: UICollectionViewDelegateFlowLayout {

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: Constants.galleryItemWidth, height: frame.height)
}

}