Как использовать динамическую высоту UICollectionView для ячейки, которая находится внутри ячейки табличного представления с динамической шириной ячейки? - PullRequest
0 голосов
/ 16 октября 2018

My ALL Swift  file codes


import UIKit

class ViewController: UIViewController {
    
    @IBOutlet var tblViewNeel: UITableView!
    
    
    
    var categories = ["Action", "Drama", "Science Fiction", "Kids", "Horror"]
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
 
    }
}

extension ViewController : UITableViewDelegate { }

extension ViewController : UITableViewDataSource {
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return categories[section]
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return categories.count
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CategoryRow
        
        cell.intSec = indexPath.section
        
        return cell
    }
    

    
}

class CategoryRow : UITableViewCell {
    @IBOutlet weak var collectionView: UICollectionView!
    
    
    var intSec = 0
    
    
}

extension CategoryRow : UICollectionViewDataSource {
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 12
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as! VideoCell
        return cell
    }
    
}

extension CategoryRow : UICollectionViewDelegateFlowLayout {
    
//    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
//        let itemsPerRow:CGFloat = 4
//        let hardCodedPadding:CGFloat = 5
//        let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
//        let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
//        return CGSize(width: itemWidth, height: itemHeight)
//    }
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        
        if intSec == 0{
            
            return CGSize(width: 100, height: 50 + 30)
        }else if intSec == 1{
            
            return CGSize(width: 150, height: 200 + 30)
        }else if intSec == 2{
            
            return CGSize(width: 200, height: 200 + 30)
        }else if intSec == 3{
            
            return CGSize(width: 250, height: 300 + 30)
        }else if intSec == 4{
            
            return CGSize(width: 300, height: 350 + 30)
        }else if intSec == 5{
            
            return CGSize(width: 350, height: 500 + 30)
        }else{
            
            return CGSize(width: 50, height: 200 + 30)
        }
        
        
    }
}

import UIKit

class VideoCell : UICollectionViewCell {
    
    @IBOutlet weak var imageView: UIImageView!
}

My ALL Swift коды файлов

import UIKit

class ViewController: UIViewController {

    @IBOutlet var tblViewNeel: UITableView!

    var categories = ["Action", "Drama", "Science Fiction", "Kids", "Horror"]

    override func viewDidLoad() {
        super.viewDidLoad()

        tblViewNeel.rowHeight = 50.0            
        tblViewNeel.estimatedRowHeight = UITableViewAutomaticDimension
    }
}

extension ViewController : UITableViewDelegate { }

extension ViewController : UITableViewDataSource {

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return categories[section]
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return categories.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

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

        cell.intSec = indexPath.section

        return cell
    }
}

class CategoryRow : UITableViewCell {
    @IBOutlet weak var collectionView: UICollectionView!

    var intSec = 0
}

extension CategoryRow : UICollectionViewDataSource {

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as! VideoCell
        return cell
    }        
}

extension CategoryRow : UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {


        if intSec == 0{

            return CGSize(width: 100, height: 50 + 30)
        }else if intSec == 1{

            return CGSize(width: 150, height: 200 + 30)
        }else if intSec == 2{

            return CGSize(width: 200, height: 200 + 30)
        }else if intSec == 3{

            return CGSize(width: 250, height: 300 + 30)
        }else if intSec == 4{

            return CGSize(width: 300, height: 350 + 30)
        }else if intSec == 5{

            return CGSize(width: 350, height: 500 + 30)
        }else{

            return CGSize(width: 50, height: 200 + 30)
        }


    }
}

import UIKit

class VideoCell : UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
}

enter image description here

https://www.thorntech.com/2016/01/scrolling-in-two-directions-like-netflix-part-2-making-api-calls/

Я используюxcode 9.4.1 Я использовал эту демонстрацию и могу иметь такую ​​же ячейку представления коллекции размеров, но я хочу динамическую ширину и высоту ячейки, в которой есть изображение и его заголовок, как показано на рисунке. Это хорошо работает для индекса indexpath ячейки == 0.... но когда я увеличиваю высоту и ширину ячейки, ярлык исчезает. все предложения приветствуются и заранее благодарны .. :)

1 Ответ

0 голосов
/ 16 октября 2018

Я рекомендую иметь согласованный размер ячейки и позволить изображениям заполнять размер с правильным соотношением, используя:

 imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill
 imageView.clipsToBounds = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...