Изменить один и тот же макет UICollectionViewCell для разных представлений - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть два представления, B и C, и B наследуется от C.

C содержит CollectionView.Каждая ячейка имеет тип ProductsCollectionViewCell (код ниже)

Когда представление C загружает свои продукты, я получаю следующее:

enter image description here

В представлении B я хочу, чтобы ячейки выглядели так:

enter image description here

в представлении C, у меня есть это:

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

Как видите, я использовал GetViewCGSize (мой собственный метод), поэтому я могу переопределить его в других представлениях, чтобы получить другой размер ячейки.

Поэтому я использовал переопределение для этой функции в представлении B:

override func GetViewCGSize(_ collectionView: UICollectionView) -> CGSize
    {
        return CGSize(width: self.ProductsCollection.frame.width, height: 10)
    }

но вид для B остается таким же, как и для C.

Чего мне не хватает?

Это код для ячейки:

class ProductsCollectionViewCell: UICollectionViewCell
{    
    var ProductImageView: UIImageView!
    var ProductName: UILabel!
    var ProductPrice: UILabel!

    var productUniqueID: String!

    // Initialization from here
    override init(frame: CGRect)
    {
        super.init(frame: frame)

        commonInit()
    }


    required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        commonInit()
    }

    func commonInit()
    {
        ProductImageView = UIImageView()
        ProductPrice = UILabel()
        ProductName = UILabel()
        ProductImageView.translatesAutoresizingMaskIntoConstraints = false
        ProductName.translatesAutoresizingMaskIntoConstraints = false

        self.addSubview(ProductImageView)
        self.addSubview(ProductName)
        self.addSubview(ProductPrice)

        ProductImageView.image = #imageLiteral(resourceName: "DefaultProductImage")
        ProductImageView.contentMode = .scaleAspectFit

        ProductImageView.layer.borderColor = UIColor.black.cgColor
        ProductImageView.layer.borderWidth = 1
        self.layer.borderColor = UIColor.black.cgColor
        self.layer.borderWidth = 1
    }

    override func layoutSubviews()
    {
        let margins = self.contentView.layoutMarginsGuide

        //Add top, left, right constraint relative to cell content view like below
        ProductImageView.topAnchor.constraint(equalTo: margins.topAnchor,constant:5).isActive = true
        ProductImageView.centerXAnchor.constraint(equalTo: margins.centerXAnchor).isActive = true
        ProductImageView.widthAnchor.constraint(equalTo: margins.widthAnchor).isActive = true
        ProductImageView.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: -50).isActive = true

        //Now set your label top anchor to display it below your image view
        ProductName.topAnchor.constraint(equalTo: ProductImageView.bottomAnchor,constant:5).isActive = true
        //To center align
        ProductName.centerXAnchor.constraint(equalTo: margins.centerXAnchor).isActive = true

        ProductPrice.translatesAutoresizingMaskIntoConstraints = false
        ProductPrice.topAnchor.constraint(equalTo: ProductName.bottomAnchor,constant:5).isActive = true
        ProductPrice.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true
        //To center align
        ProductPrice.centerXAnchor.constraint(equalTo: margins.centerXAnchor).isActive = true
    }
}



extension UIImageView
{
    func loadImageUsingUrlString(urlString: String)
    {
        let url = NSURL(string: urlString)
        URLSession.shared.dataTask(with: url! as URL, completionHandler:
        {
            (data, response, error) in
            if error != nil
            {
                print (error!)
                return
            }

            DispatchQueue.main.async
            {
                self.image = UIImage(data: data!)
            }
        }).resume() // Closes URLSession.shared

    }
}

Хотя я понимаю, что содержимое ячейки не изменится, так как я ничего не изменил, я по крайней мере ожидаю, что сама ячейкаизменить размер.

Я не хочу использовать табличное представление, но оставайтесь с моим UICollectionView C, так как он имеет много необходимых функций.

...