প্রোগ্রাম হিসাবে ইউআইসিএল্লেশনভিউসেল প্রস্থ এবং উচ্চতা কীভাবে সেট করবেন


111

আমি একটি বাস্তবায়ন করার চেষ্টা করছি CollectionView। আমি যখন অটোলেআউট ব্যবহার করছি তখন আমার ঘরগুলি আকার পরিবর্তন করবে না তবে তাদের প্রান্তিককরণ।

এখন আমি বরং তাদের আকারগুলি উদাহরণ হিসাবে পরিবর্তন করতে চাই

//var size = CGSize(width: self.view.frame.width/10, height: self.view.frame.width/10)

আমি আমার মধ্যে সেট করার চেষ্টা করেছি CellForItemAtIndexPath

collectionCell.size = size

এটি যদিও কাজ করে না।

এই অর্জন একটি উপায় আছে কি?

সম্পাদনা করুন :

দেখে মনে হচ্ছে, উত্তরগুলি কেবল আমার কালেকভিউ প্রস্থ এবং উচ্চতা নিজেই পরিবর্তন করবে। সীমাবদ্ধতায় দ্বন্দ্ব কি সম্ভব? কোন ধারণা?

উত্তর:


288

কাস্টম সেল উচ্চতার প্রস্থ নির্ধারণ করতে এই পদ্ধতিটি ব্যবহার করুন।

এই প্রোটোকল যুক্ত করা নিশ্চিত করুন

UICollectionViewDelegate

UICollectionViewDataSource

UICollectionViewDelegateFlowLayout

আপনি ব্যবহার করে থাকেন দ্রুতগতি 5 বা Xcode 11 এবং পরে আপনি সেট প্রয়োজন Estimate Sizeথেকে noneঅনুক্রমে এটি সঠিকভাবে কাজ করতে পারে স্টোরিবোর্ড ব্যবহার করে। আপনি যদি সেট না করে থাকেন তবে নীচের কোডটি প্রত্যাশার মতো কাজ করবে না।

এখানে চিত্র বর্ণনা লিখুন

সুইফট 4 বা তারপরে

extension YourViewController: UICollectionViewDelegate {
    //Write Delegate Code Here
}

extension YourViewController: UICollectionViewDataSource {
    //Write DataSource Code Here
}

extension YourViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: screenWidth, height: screenWidth)
    }
}

উদ্দেশ্য গ

@interface YourViewController : UIViewController<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame)));
}

4
@ রম্যআলজুহৌরি আমার উত্তর সম্পাদনা করেছেন দয়া করে চেক করুন এবং আমাদের এখনও এটি আরও পরিষ্কার করার দরকার আছে কিনা তা আমাকে
জানাবেন

8
আমি প্রোগ্রামগতভাবে সমস্ত কিছু করতে অভ্যস্ত যে এটি এখন আমার কাছে এত বিদেশী বলে মনে হচ্ছে। স্টোরিবোর্ডে আনুমানিক আকারটি কারও সাথে সেট করা যায় না এবং ইউআইসিএলিকেশনভিউ ডেলিগেটফ্লোএলআউট যুক্ত করা কৌশলটি কী করে
ল্যান্স সামেরিয়া

6
প্রাকৃতিক আকার নির্ধারণ কারও পক্ষে আমার পক্ষে কার্যকর হয়নি। আপনাকে ধন্যবাদ পিংকেশজির
মোহন ২

6
আমি খুশী হয়েছি যে আমি এটি পেয়েছি, আমি কেবল
এটির

4
আমার দিনগুলি কেউই রক্ষা করতে পারে না এমন আনুমানিক আকার সেট করুন।
Tounaobun

73

UICollectionViewDelegateFlowLayoutআপনার classঘোষণায় প্রোটোকল যুক্ত করার বিষয়টি নিশ্চিত করুন

class MyCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout
{
    //MARK: - UICollectionViewDelegateFlowLayout

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

প্রবাহ বিন্যাস এবং কাস্টম নয় ব্যবহার করতে ভুলবেন না। তবে আপনার একমাত্র আমার পক্ষে কাজ করেছে worked ধন্যবাদ!
শান

আমরা কীভাবে এখানে গতিশীল উচ্চতা দিতে পারি যে স্থির উচ্চতা 100.0 হিসাবে দেওয়া হয়েছে
সাংভি

68

যদি কেউ স্টোরিবোর্ড ব্যবহার করে এবং ইউআইসিক্লিকেশনভিউডেলিগেটফ্লো লেআউটকে ওভাররাইড করে থাকে তবে সুইফ্ট 5 এবং এক্সকোড 11 এও প্রাক্কলিত আকারটিকে কোনওটিতেই সেট করে না এখানে চিত্র বর্ণনা লিখুন


4
এটা সহায়ক ছিল। ধন্যবাদ !!
নাভাল হাসান

4
কোনওটির কাছেই প্রাক্কলনের আকার নির্ধারণ করা সবকিছু স্থির করে না
এমএমকে

4
সমস্যা দ্বারা স্থিরীকৃত অনুমানের আকার
কোনওটিই নয়

4
ভাল ফিক্স। অ্যাপলের ডকুমেন্টেশন অনুসারে এই সমস্যাটির আমার নির্ণয় এখানে : আইবি ব্যবহার করার সময় UICollectionViewFlowLayoutডিফল্ট বলে মনে হয় যদিও ডকুমেন্টেশন বলে যে এটি ডিফল্ট হওয়া উচিত । অ্যাপল যেমন বলেছে, "আপনার সংগ্রহ দেখার জন্য স্ব-আকারের কক্ষগুলি সক্ষম করে।" এজন্য আইবিতে অন্যান্য আকারের পরিবর্তনগুলি কিছুই করে না। estimatedItemSizeUICollectionViewFlowLayout.automaticSizeCGSizeZeroautomaticSize
অ্যান্ড্রু কির্না

4
মাত্র আমার ঘন্টা বাঁচিয়েছি আমি চিরকালের জন্য কোনও সমাধানের চেষ্টা করছি
রায় রে

20

শেষ পর্যন্ত উত্তর পেয়ে গেল। আপনার প্রসারিত হওয়া উচিত UICollectionViewDelegateFlowLayout
এটি উপরের উত্তরগুলির সাথে কাজ করা উচিত।


আপনি একটি উদাহরণ লিখতে পারেন?
মামদোহ এল নাকীব

প্রকৃতপক্ষে আমি ডেটাসোর্স এবং ডেলিগেটফ্লোএলআউট প্রোটোকল উভয়ের সাথেই একটি এক্সটেনশন করেছি এবং এটি কার্যকর হয়নি। যা কাজ করেছিল তা ফ্লোআলআউট অংশটিকে তার নিজের একটি এক্সটেনশনে পৃথক করছিল। কেন তা নিশ্চিত নয় তবে এটি 3
গতিবেগে

15

দ্রুত 4.1

কালেকশন ভিউয়ের আকার পরিবর্তন করার জন্য আপনার কাছে দুটি উপায় রয়েছে।
প্রথম উপায় -> এই প্রোটোকলটি ইউআইকোলিকেশনভিউডেলিগেটফ্লোএলআউট যুক্ত করুন
আমার ক্ষেত্রে আমি সেলকে একটি লাইনের 3 অংশে বিভক্ত করতে চাই। আমি নীচে এই কোডটি করেছি

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource ,UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
            // In this function is the code you must implement to your code project if you want to change size of Collection view
            let width  = (view.frame.width-20)/3
            return CGSize(width: width, height: width)
    }

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath)
        if let label = cell.viewWithTag(100) as? UILabel {
            label.text = collectionData[indexPath.row]
        }
        return cell
    }
}

দ্বিতীয় উপায় -> আপনাকে ইউআইসিএল্লেশনভিউডেলিগেটফ্লোলয়আউট যুক্ত করতে হবে না তবে আপনাকে নীচের কোডের পরিবর্তে ভিউডিল্ড ফাংশনে কিছু কোড লিখতে হবে

class ViewController: UIViewController {
@IBOutlet weak var collectionView1: UICollectionView!
        var collectionData = ["1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10.", "11.", "12."]

    override func viewDidLoad() {
        super.viewDidLoad()
        let width = (view.frame.width-20)/3
        let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
        layout.itemSize = CGSize(width: width, height: width) 
    }
}


extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {


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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath)
        if let label = cell.viewWithTag(100) as? UILabel {
            label.text = collectionData[indexPath.row]
        }

        return cell
    }
}

আপনি যেভাবে প্রথম কোড বা দ্বিতীয় উপায়ে কোড লিখুন আপনি উপরের মত একই ফলাফল পাবেন। আমি এটি লিখেছিলাম. এটা আমার জন্য কাজ করেছে

এখানে চিত্র বর্ণনা লিখুন


4
Raywenderlich.com থেকে সরাসরি 😂
অ্যান্ড্রু

13

আইফোন আকার অনুযায়ী আকার অনুপাত:

আইফোনের আকার সম্পর্কিত কক্ষের আলাদা প্রস্থ এবং উচ্চতা পেতে আপনি যা করতে পারেন তা এখানে:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let width = (self.view.frame.size.width - 12 * 3) / 3 //some width
    let height = width * 1.5 //ratio
    return CGSize(width: width, height: height)
}

এবং এই উত্তরটির কাজের জন্য আপনার নিজের অটোলআউট সীমাবদ্ধতাগুলিও অক্ষম করা উচিত।


আমি এই এবং সর্বোপরি সমাধান চেষ্টা করেছিলেন কিন্তু একটি কক্ষে বিষয়বস্তু autoresizing করা হয় না, কিভাবে আমি এই ঠিক করতে পারবো
Biasi Wiga

7

সংগ্রহ ভিউটিতে একটি বিন্যাসের অবজেক্ট রয়েছে। আপনার ক্ষেত্রে এটি সম্ভবত একটি প্রবাহের বিন্যাস ( ইউআইসোক্লিকেশনভিউফ্লোলোআউট )। প্রবাহ বিন্যাসের itemSizeসম্পত্তি সেট করুন ।


এই চেষ্টা। আমাকে আগের মত একই সমস্যা দেয়। কোনওভাবে আমার সংগ্রহেভিউটি আমার কোষগুলির চেয়ে আকারটি পরিবর্তন করে।
জেভিএস

4
ঠিক আছে, আপনি যখন এটি করবেন তখন এটি নির্ভর করে। আপনি আপনার আসল কোডটি দেখান নি, তাই আপনি কী করছেন কে জানে? আমি আপনাকে আশ্বাস দিচ্ছি এটি কাজ করে।
ম্যাট

7

মধ্যে Swift3 এবং Swift4 আপনি যোগ করে ঘরের আকার পরিবর্তন করতে পারেন UICollectionViewDelegateFlowLayout এবং বাস্তবায়নের এটা ভালো আছে:

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

অথবা যদি ইউনিকোলিকেশনভিউ প্রোগ্রামগতভাবে তৈরি করে থাকেন তবে আপনি এটির মতো এটি করতে পারেন:

    let layout = UICollectionViewFlowLayout()
                    layout.scrollDirection = .horizontal //this is for direction
                    layout.minimumInteritemSpacing = 0 // this is for spacing between cells
                    layout.itemSize = CGSize(width: view.frame.width, height: view.frame.height) //this is for cell size
let collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: layout)

4

সুইফট 4 সুইফট 4 আইওএস সংগ্রহ ভিউ সংগ্রহের ভিউ উদাহরণ এক্সকোড সর্বশেষ কোড ওয়ার্কিং নমুনা

এটি শীর্ষের প্রতিনিধি বিভাগে যুক্ত করুন

ইউআইকোলিকেশনভিউডেলিগেটফ্লোএলআউট

এবং এই ফাংশন ব্যবহার করুন

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = (self.view.frame.size.width - 20) / 3 //some width
    let height = width * 1.5 //ratio
    return CGSize(width: width, height: height)
}

///// নমুনা সম্পূর্ণ কোড

সংগ্রহ ভিউ এবং স্টোরিবোর্ডে কালেকশন ভিউ সেল তৈরি করুন সংগ্রহে উল্লেখ করুন
@ আইবিআউটলেট দুর্বল ভার সিভিসিন্ট হিসাবে: ইউআইকোলিকেশনভিউ!

এটি দেখুন নিয়ামকটিতে পেস্ট করুন

 import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

    var arrVeg = [String]()
    var arrFruits = [String]()
    var arrCurrent = [String]()
    
    @IBOutlet weak var cvContent: UICollectionView!
    
  
    
    override func viewDidLoad() {
        super.viewDidLoad()
        arrVeg = ["Carrot","Potato", "Tomato","Carrot","Potato", "Tomato","Carrot","Potato", "Tomato","Carrot","Potato", "Tomato"]
        
        arrVeg = ["Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange","Mango","Papaya","Orange"]
        
        
        arrCurrent = arrVeg
    }
    //MARK: - CollectionView
    


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let width = (self.view.frame.size.width - 20) / 3 //some width
        let height = width * 1.5 //ratio
        return CGSize(width: width, height: height)
    }
    
    func numberOfSections(in collectionView: UICollectionView) -> Int {

        return 1
    }
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        
        
        return arrCurrent.count
    }
    
    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ContentCollectionViewCell
        cell.backgroundColor =  UIColor.green
        return cell
    }
}

2

পদ্ধতির নীচে চেষ্টা করুন

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    return CGSize(width: 100.0, height: 100.0)
}

2

সুইফট 5 প্রোগ্রামগতভাবে

lazy var collectionView: UICollectionView = {
        let layout = UICollectionViewFlowLayout()
        layout.scrollDirection = .horizontal

        //Provide Width and Height According to your need
        let cellWidth = UIScreen.main.bounds.width / 10
        let cellHeight = UIScreen.main.bounds.height / 10
        layout.itemSize = CGSize(width: cellWidth, height: cellHeight)

        //You can also provide estimated Height and Width
        layout.estimatedItemSize = CGSize(width: cellWidth, height: cellHeight)

        //For Setting the Spacing between cells
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0

        return UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    }()

1
**Swift 5**
To make this work you have to do the following.

Add these protocols

 - UICollectionViewDelegate


 - UICollectionViewDataSource


 - UICollectionViewDelegateFlowLayout

Your code will then look like this

extension YourViewController: UICollectionViewDelegate {
    //Write Delegate Code Here
}

extension YourViewController: UICollectionViewDataSource {
    //Write DataSource Code Here
}

extension YourViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: screenWidth, height: screenWidth)
    }
}

Now the final and crucial step to see this take effect is to go to your viedDidLoad function inside your Viewcontroller.

    override func viewDidLoad() {
        super.viewDidLoad()
        collection.dataSource = self // Add this
        collection.delegate = self // Add this

        // Do any additional setup after loading the view.
    }

Without telling your view which class the delegate is it won't work.

1

# সম্পূর্ণ সহজ উপায়:

class YourCollection: UIViewController,
     UICollectionViewDelegate,
     UICollectionViewDataSource {

# আপনাকে অবশ্যই "ইউআইসি সিলেকশনভিউ ডেলিগেটফ্লোএলআউট" যুক্ত করতে হবে বা কোনও স্বয়ংক্রিয়রূপ নেই:

class YourCollection: UIViewController,
     UICollectionViewDelegate,
     UICollectionViewDataSource,
     UICollectionViewDelegateFlowLayout {

# টাইপ "সাইজফোরআইটেম্যাট ..."। তুমি করেছ!

class YourCollection: UIViewController,
     UICollectionViewDelegate,
     UICollectionViewDataSource,
     UICollectionViewDelegateFlowLayout {
 
     func collectionView(_ collectionView: UICollectionView,
      layout collectionViewLayout: UICollectionViewLayout,
      sizeForItemAt indexPath: IndexPath) -> CGSize {
     
     return CGSize(width: 37, height: 63)
}

এটাই.

উদাহরণস্বরূপ, যদি আপনি চান "প্রতিটি ঘর পুরো সংগ্রহের ভিউ পূরণ করে":

     guard let b = view.superview?.bounds else { .. }
     return CGSize(width: b.width, height: b.height)

0

অন্য একটি উপায় হ'ল সরাসরি প্রবাহ বিন্যাসে মান সেট করা

    let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    layout.itemSize = CGSize(width: size, height: size)

0

সুতরাং আপনার সংগ্রহের বৈশিষ্ট্যের জন্য স্টোরিবোর্ড থেকে সেটিং করা দরকার সেল বিভাগ অনুমানের আকারটি কারও নয়, এবং আপনার ভিউকন্ট্রোলারে এই পদ্ধতিটি প্রয়োগের জন্য আপনার ডেলিগেট পদ্ধতি থাকা দরকার: optional func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize


0

ইউআইসিএল্লেশনভিউডেলিগেটফ্লোএলআউট পদ্ধতিটি ব্যবহার করার চেষ্টা করুন। এক্সকোড 11 বা তার পরে, আপনাকে স্টোরিবোর্ড থেকে কোনওটির কাছেই প্রাক্কলিত আকার নির্ধারণ করতে হবে।

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: 
UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let padding: CGFloat =  170
    let collectionViewSize = advertCollectionView.frame.size.width - padding
    return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)
}

0

একটি সহজ উপায়:

আপনার যদি কেবল একটি সাধারণ নির্দিষ্ট আকারের প্রয়োজন হয় :

class SizedCollectionView: UIICollectionView {
    override func common() {
        super.common()
        let l = UICollectionViewFlowLayout()
        l.itemSize = CGSize(width: 42, height: 42)
        collectionViewLayout = l
    }
}

এখানেই শেষ এটা পেতে ওখানে যাও.

স্টোরিবোর্ডে, কেবল ক্লাসটি ইউআইকোলিকেশনভিউ থেকে সাইজড ক্লেকশনভিউতে পরিবর্তন করুন।

তবে !!!

"UI 'I' কালেকশন ভিউ" এর বেস ক্লাসটি লক্ষ্য করুন। ইনিশিয়ালাইজারের জন্য 'আমি'।

কোনও সংগ্রহ দর্শনে ইনিশিয়ালাইজার যুক্ত করা এত সহজ নয়। এখানে একটি সাধারণ পদ্ধতি রয়েছে:

আরম্ভের সাথে সংগ্রহ দেখুন ...

import UIKit

class UIICollectionView: UICollectionView {
    private var commoned: Bool = false
    
    override func didMoveToWindow() {
        super.didMoveToWindow()
        if window != nil && !commoned {
            commoned = true
            common()
        }
    }
    
    internal func common() {
    }
}

বেশিরভাগ প্রকল্পে আপনার "প্রাথমিককরণ সহ একটি সংগ্রহ ভিউ" দরকার। সুতরাং UIICollectionViewআপনার প্রকল্পটিতে সম্ভবত আপনার কাছে (ইনিশিয়ালাইজারের জন্য অতিরিক্ত আই নোট করুন!) থাকতে হবে।


0

সুইফ্ট 5, প্রোগ্রামের ইউনিকোলিকেশনভিউ সেলের প্রস্থ এবং উচ্চতা নির্ধারণ করছে

// MARK: MyViewController

final class MyViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
    
    private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
        let layout = UICollectionViewFlowLayout()
        let spacing: CGFloat = 1
        let numOfColumns: CGFloat = 3
        let itemSize: CGFloat = (UIScreen.main.bounds.width - (numOfColumns - spacing) - 2) / 3
        layout.itemSize = CGSize(width: itemSize, height: itemSize)
        layout.minimumInteritemSpacing = spacing
        layout.minimumLineSpacing = spacing
        layout.sectionInset = UIEdgeInsets(top: spacing, left: spacing, bottom: spacing, right: spacing)
        return layout
    }()
    
    private lazy var collectionView: UICollectionView = {
        let collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: collectionViewLayout)
        collectionView.backgroundColor = .white
        collectionView.dataSource = self
        collectionView.delegate = self
        collectionView.translatesAutoresizingMaskIntoConstraints = false
        return collectionView
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureCollectionView()
    }
    
    private func configureCollectionView() {
        view.addSubview(collectionView)
        NSLayoutConstraint.activate([
            collectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
            collectionView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
            collectionView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
            collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor)
        ])
        collectionView.register(PhotoCell.self, forCellWithReuseIdentifier: "PhotoCell")
    }
    
    // MARK: UICollectionViewDataSource

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 20
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoCell", for: indexPath) as! PhotoCell
        cell.backgroundColor = .red
        return cell
    }
    
}

// MARK: PhotoCell

final class PhotoCell: UICollectionViewCell {
    
    lazy var imageView: UIImageView = {
        let imageView = UIImageView()
        imageView.contentMode = .scaleAspectFill
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.layer.masksToBounds = true
        return imageView
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupViews()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init?(coder:) not implemented")
    }
    
    func setupViews() {
        addSubview(imageView)
        NSLayoutConstraint.activate([
            topAnchor.constraint(equalTo: topAnchor),
            bottomAnchor.constraint(equalTo: bottomAnchor),
            leadingAnchor.constraint(equalTo: leadingAnchor),
            trailingAnchor.constraint(equalTo: trailingAnchor)
        ])
    }
    
}

0

তাহলে আমাকে মতো, আপনি আপনার কাস্টম প্রবাহ বিন্যাস রাখার প্রয়োজন itemSizeপরিবর্তনশীল আপনার সংগ্রহ দৃশ্য এর প্রস্থ উপর ভিত্তি করে আপডেট, আপনি আপনার ওভাররাইড করা উচিত UICollectionViewFlowLayout'র prepare()পদ্ধতি। এই কৌশলটি ডেমো করছে এমন একটি ডাব্লুডাব্লুডিসি ভিডিও

class MyLayout: UICollectionViewFlowLayout {
    
    override func prepare() {
        super.prepare()
        
        guard let collectionView = collectionView else { return }
        
        itemSize = CGSize(width: ..., height: ...)
    }
    
}

-4

এটি আমার সংস্করণ, আপনার প্রয়োজনীয়তা অনুসারে ঘরের আকার পেতে আপনার উপযুক্ত অনুপাতটি সন্ধান করুন।

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
return CGSizeMake(CGRectGetWidth(collectionView.frame)/4, CGRectGetHeight(collectionView.frame)/4); 
} 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.