Как сделать collectionView в tableView?

Для создания collectionView в tableView вам понадобится несколько шагов. Вот подробное объяснение:

1. Создайте новый проект в Xcode, выбрав шаблон "Single View Application".
2. Откройте файл Main.storyboard и перетащите TableView на главный экран.
3. Установите dataSource и delegate для tableView. Для этого перетащите связь от TableView к файлу ViewController с помощью ctrl-клика и выберите "dataSource" и "delegate".
4. Создайте новый UITableViewCell под collectionView. Щелкните правой кнопкой мыши на группу файлов проекта и выберите "New File". Выберите шаблон "Cocoa Touch Class" и установите имя "CollectionViewCell". Помимо этого, убедитесь, что выбран язык Swift и отмечен флажок "Also create XIB file". Нажмите кнопку "Next" и затем "Create". В новом файле CollectionViewCell.xib установите Collection View Cell как Content view.
5. Откройте файл ViewController.swift и добавьте следующий код:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UICollectionViewDelegate, UICollectionViewDataSource {
    
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Установка dataSource и delegate для tableView
        tableView.dataSource = self
        tableView.delegate = self
        
        // Регистрация xib-файла CollectionViewCell
        tableView.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellReuseIdentifier: "CollectionViewCell")
    }

    // MARK: - UITableViewDataSource

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1 // Замените это значение на количество ячеек, которые вы хотите отобразить в таблице
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
        return cell
    }

    // MARK: - UITableViewDelegate

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 200 // Замените это значение на высоту, которая должна быть установлена для ячейки
    }
    
    // MARK: - UICollectionViewDataSource
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10 // Замените это значение на количество элементов, которые вы хотите отобразить в коллекции внутри ячейки
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
        // Настройте ячейку коллекции здесь
        return cell
    }
    
    // MARK: - UICollectionViewDelegate
    
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        // Обработка нажатий на элементы коллекции здесь
    }
}

Раскройте Assistant editor (это кнопка с изображением двух перекрещенных кружев в правом верхнем углу Xcode) и убедитесь, что файл Main.storyboard открыт. Плотно свяжите TableView с Outlet с именем tableView, перетаскив его на код в ViewController.swift. Затем, на XIB-файле CollectionViewCell.xib (его можно найти в группе файлов проекта) щелкните правой кнопкой мыши и перетащите Outlet Collection View с именем "collectionView" на код в CollectionViewCell.swift.

6. Настройте внешний вид ячейки коллекции в файле CollectionViewCell.xib, добавив необходимые UI элементы, кастомизировав их и проставив им правильные Constraints. Кроме того, не забудьте установить Identifier для ячейки коллекции в Attributes Inspector (можно выбрать любое уникальное имя).

7. Запустите приложение на симуляторе или устройстве для проверки. Вы должны увидеть tableView с collectionView в каждой ячейке таблицы.

Это базовая реализация collectionView в tableView. Вы можете настроить количество ячеек, высоту ячеек, а также настроить ячейку коллекции по вашему усмотрению. Не забудьте также реализовать обработку событий нажатий элементов коллекции и другую функциональность согласно вашим требованиям.