উত্তর:
আপনি collectionView:layout:insetForSectionAtIndex:
আপনার জন্য পদ্ধতিটি ব্যবহার করতে পারেন UICollectionView
বা আপনার সাথে সংযুক্ত বস্তুর sectionInset
সম্পত্তি সেট করতে পারেন :UICollectionViewFlowLayout
UICollectionView
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(top, left, bottom, right);
}
অথবা
UICollectionViewFlowLayout *aFlowLayout = [[UICollectionViewFlowLayout alloc] init];
[aFlowLayout setSectionInset:UIEdgeInsetsMake(top, left, bottom, right)];
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 25, left: 15, bottom: 0, right: 5)
}
UICollectionViewDelegateFlowLayout
পদ্ধতিটি ব্যবহার করতে আপনার ভিউকন্ট্রোলার প্রতিনিধিদের তালিকায় যুক্ত মনে রাখবেনinsetForSectionAtIndex
উপর ব্যবধান যোগ করার জন্য সমগ্র UICollectionView
:
UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout*) collection.collectionViewLayout;
flow.sectionInset = UIEdgeInsetsMake(topMargin, left, bottom, right);
একই সারির উপাদানগুলির মধ্যে ফাঁক দিয়ে খেলতে (আপনি যদি অনুভূমিকভাবে স্ক্রোল করছেন তবে কলাম) এবং তাদের আকারগুলি:
flow.itemSize = ...;
flow.minimumInteritemSpacing = ...;
collection.collectionViewLayout
প্রয়োজনে উদাহরণ হিসাবে যেমন একটি কাস্ট প্রয়োজন @ পূজা লিখেছেন: UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout*) self.collectionViewLayout;
if let flow = collectionViewLayout as? UICollectionViewFlowLayout { flow.itemSize = CGSize(width: 100, height: 100) }
সুইফট 4
let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout // If you create collectionView programmatically then just create this flow by UICollectionViewFlowLayout() and init a collectionView by this flow.
let itemSpacing: CGFloat = 3
let itemsInOneLine: CGFloat = 3
flow.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
let width = UIScreen.main.bounds.size.width - itemSpacing * CGFloat(itemsInOneLine - 1) //collectionView.frame.width is the same as UIScreen.main.bounds.size.width here.
flow.itemSize = CGSize(width: floor(width/itemsInOneLine), height: width/itemsInOneLine)
flow.minimumInteritemSpacing = 3
flow.minimumLineSpacing = 3
সম্পাদনা করুন এক্সকোড 11.4 এবং সুইফ্ট 5
let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
কাজ করে না নীচে কাজ ব্যবহার করুন।
let flow = UICollectionViewFlowLayout()
backgroundColor
করুন collectionView
। বা যাই হোক না কেন সুপার ভিউ।
এই পৃষ্ঠায় কিছু ভুল তথ্য সংশোধন করতে:
1- সর্বনিম্ন আন্তঃআরমি স্পেসিং : একই সারিতে থাকা আইটেমগুলির মধ্যে ব্যবহারের জন্য সর্বনিম্ন ব্যবধান।
ডিফল্ট মান: 10.0।
(উল্লম্বভাবে স্ক্রোলিং গ্রিডের জন্য, এই মানটি একই সারিতে থাকা আইটেমগুলির মধ্যে ন্যূনতম ব্যবধানকে উপস্থাপন করে))
2- সর্বনিম্ন লাইনেস্পেসিং : গ্রিডে আইটেমগুলির লাইনের মধ্যে ব্যবহারের জন্য সর্বনিম্ন ব্যবধান।
যদিও এই থ্রেডটিতে ইতিমধ্যে বেশ কয়েকটি দরকারী উত্তর রয়েছে, তবে আমি উইলিয়াম হু এর উত্তরের ভিত্তিতে একটি আধুনিক সুইফ্ট সংস্করণ যুক্ত করতে চাই । এটি দুটি জিনিসকেও উন্নত করে:
কোডটি এখানে:
// Create flow layout
let flow = UICollectionViewFlowLayout()
// Define layout constants
let itemSpacing: CGFloat = 1
let minimumCellWidth: CGFloat = 120
let collectionViewWidth = collectionView!.bounds.size.width
// Calculate other required constants
let itemsInOneLine = CGFloat(Int((collectionViewWidth - CGFloat(Int(collectionViewWidth / minimumCellWidth) - 1) * itemSpacing) / minimumCellWidth))
let width = collectionViewWidth - itemSpacing * (itemsInOneLine - 1)
let cellWidth = floor(width / itemsInOneLine)
let realItemSpacing = itemSpacing + (width / itemsInOneLine - cellWidth) * itemsInOneLine / max(1, itemsInOneLine - 1))
// Apply values
flow.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
flow.itemSize = CGSize(width: cellWidth, height: cellWidth)
flow.minimumInteritemSpacing = realItemSpacing
flow.minimumLineSpacing = realItemSpacing
// Apply flow layout
collectionView?.setCollectionViewLayout(flow, animated: false)
itemsInOneLine
1 হয় তবে এখানে শূন্য দ্বারা বিভাজনের কারণে এটি একটি NaN এর ফলাফল করবে:itemsInOneLine / (itemsInOneLine - 1)
ব্যবহার setMinimumLineSpacing:
এবং setMinimumInteritemSpacing:
উপর UICollectionViewFlowLayout
-Object।
ব্যবহার collectionViewFlowLayout.sectionInset
বা collectionView:layout:insetForSectionAtIndex:
সঠিক।
তবে আপনার সংগ্রহেভিউয়ের যদি একাধিক বিভাগ থাকে এবং আপনি পুরো সংগ্রহভিউতে মার্জিন যুক্ত করতে চান তবে আমি স্ক্রোলভিউ সামগ্রীটি ব্যবহার করার পরামর্শ দিচ্ছি ইনসেট:
UIEdgeInsets collectionViewInsets = UIEdgeInsetsMake(50.0, 0.0, 30.0, 0.0);
self.collectionView.contentInset = collectionViewInsets;
self.collectionView.scrollIndicatorInsets = UIEdgeInsetsMake(collectionViewInsets.top, 0, collectionViewInsets.bottom, 0);
CollectionItem
এর মধ্যে স্থান রাখার জন্য এটি ব্যবহার করুন
এই দুটি লাইন ভিউডিডলোডে লিখুন
UICollectionViewFlowLayout *collectionViewLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout;
collectionViewLayout.sectionInset = UIEdgeInsetsMake(<CGFloat top>, <CGFloat left>, <CGFloat bottom>, <CGFloat right>)
আপনার সাথে সংযুক্ত বস্তুর insetForSectionAt
সম্পত্তি সেট UICollectionViewFlowLayout
করুনUICollectionView
এই প্রোটোকলটি যুক্ত করার বিষয়টি নিশ্চিত করুন
UICollectionViewDelegateFlowLayout
দ্রুতগতি
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets (top: top, left: left, bottom: bottom, right: right)
}
উদ্দেশ্য গ
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(top, left, bottom, right);
}
অবজেক্টিভ-সি তে
CGFloat spacing = 5;
UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout*)_habbitCollectionV.collectionViewLayout;
flow.sectionInset = UIEdgeInsetsMake(0, spacing, 0, spacing);
CGFloat itemsPerRow = 2;
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat oneMore = itemsPerRow + 1;
CGFloat width = screenRect.size.width - spacing * oneMore;
CGFloat height = width / itemsPerRow;
flow.itemSize = CGSizeMake(floor(height), height);
flow.minimumInteritemSpacing = spacing;
flow.minimumLineSpacing = spacing;
আপনাকে যা করতে হবে তা হ'ল আইটেমস পেয়ার মান পরিবর্তন করতে হবে এবং এটি অনুসারে প্রতি সারিতে আইটেমের সংখ্যা আপডেট করবে। তদতিরিক্ত, যদি আপনি কম-বেশি সাধারণ ব্যবধান চান তবে আপনি ব্যবধানের মানটি পরিবর্তন করতে পারেন।
নির্দিষ্ট কক্ষগুলিতে মার্জিন যুক্ত করার জন্য, আপনি এই কাস্টম প্রবাহ বিন্যাসটি ব্যবহার করতে পারেন। https://github.com/voyages-sncf-technologies/VSCollectionViewCellInsetFlowLayout/
extension ViewController : VSCollectionViewDelegateCellInsetFlowLayout
{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForItemAt indexPath: IndexPath) -> UIEdgeInsets {
if indexPath.item == 0 {
return UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 0)
}
return UIEdgeInsets.zero
}
}
সুইফ্ট 4 এবং অটোলাউটে আপনি বিভাগটি ইনসেটটি ব্যবহার করতে পারেন :
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.itemSize = CGSize(width: (view.frame.width-40)/2, height: (view.frame.width40)/2) // item size
layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10) // here you can add space to 4 side of item
collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: layout) // set layout to item
collectionView?.register(ProductCategoryCell.self, forCellWithReuseIdentifier: cellIdentifier) // registerCell
collectionView?.backgroundColor = .white // background color of UICollectionView
view.addSubview(collectionView!) // add UICollectionView to view
প্রতিটি বিভাগের মধ্যে 10px বিভাজন যুক্ত করতে কেবল এটি লিখুন
flowLayout.sectionInset = UIEdgeInsetsMake(0.0, 0.0,10,0);