UICollectionView의 셀 간격
섹션에서 셀 간격을 어떻게 설정 UICollectionView
합니까? minimumInteritemSpacing
5.0으로 설정 한 속성 이 있지만 간격이 5.0으로 표시되지 않는 것을 알고 있습니다 . flowout delegate 메소드를 구현했습니다.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
여전히 원하는 결과를 얻지 못했습니다. 나는 최소한의 간격을 생각합니다. 최대 간격을 설정할 수있는 방법이 없습니까?
나는 그 주제가 오래되었다는 것을 알고 있지만, 누군가가 여전히 당신이 필요로하는 것에 대한 올바른 대답이 필요한 경우
- 표준 흐름 레이아웃을 재정의합니다.
다음과 같은 구현을 추가하십시오.
- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect { NSArray *answer = [super layoutAttributesForElementsInRect:rect]; for(int i = 1; i < [answer count]; ++i) { UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i]; UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1]; NSInteger maximumSpacing = 4; NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame); if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) { CGRect frame = currentLayoutAttributes.frame; frame.origin.x = origin + maximumSpacing; currentLayoutAttributes.frame = frame; } } return answer; }
maximumSpacing은 원하는 값으로 설정할 수 있습니다. 이 트릭은 셀 사이의 공간이 정확히 최대 간격과 동일하다는 것을 보장합니다 !!
초기 질문을 지원합니다. 나는 간격을 5px로하려고 UICollectionView
했지만 이것이 작동하지 않습니다 UIEdgeInsetsMake(0,0,0,0)
...
UITableView에서 행에 x, y 좌표를 직접 지정 하여이 작업을 수행 할 수 있습니다 ...
내 UICollectionView 코드는 다음과 같습니다.
#pragma mark collection view cell layout / size
- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return [self getCellSize:indexPath]; // will be w120xh100 or w190x100
// if the width is higher, only one image will be shown in a line
}
#pragma mark collection view cell paddings
- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(0, 0, 0, 0); // top, left, bottom, right
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
return 5.0;
}
업데이트 : 다음 코드로 내 문제를 해결했습니다.
ViewController.m
#import "ViewController.h"
#import "MagazineCell.h" // created just the default class.
static NSString * const cellID = @"cellID";
@interface ViewController ()
@end
@implementation ViewController
#pragma mark - Collection view
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 30;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MagazineCell *mCell = (MagazineCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
mCell.backgroundColor = [UIColor lightGrayColor];
return mCell;
}
#pragma mark Collection view layout things
// Layout: Set cell size
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"SETTING SIZE FOR ITEM AT INDEX %d", indexPath.row);
CGSize mElementSize = CGSizeMake(104, 104);
return mElementSize;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
return 2.0;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 2.0;
}
// Layout: Set Edges
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
// return UIEdgeInsetsMake(0,8,0,8); // top, left, bottom, right
return UIEdgeInsetsMake(0,0,0,0); // top, left, bottom, right
}
@end
수평 흐름 레이아웃을 사용하여 셀 사이에 10 포인트 간격을 얻었습니다. 간격을 제거하려면 0 minimumLineSpacing
뿐만 아니라 설정해야했습니다 minimumInterItemSpacing
.
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
flow.itemSize = CGSizeMake(cellWidth, cellHeight);
flow.scrollDirection = UICollectionViewScrollDirectionHorizontal;
flow.minimumInteritemSpacing = 0;
flow.minimumLineSpacing = 0;
또한 모든 셀의 크기가 동일한 경우 대리자 메서드를 사용하는 대신 흐름 레이아웃에서 속성을 직접 설정하는 것이 더 간단하고 효율적입니다.
그것이 기억 최소한의 줄 간격 , 최소하지 간 항목 간격 또는 셀 공간. collectionView의 스크롤 방향은 HORIZONTAL 입니다.
수직 인 경우 셀 간 가로 공간에 대해 셀 공간 또는 항목 간 공간을 설정하고 셀 간 세로 공간에 대한 줄 간격을 설정해야합니다.
Objective-C 버전
- (CGFloat)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
return 20;
}
스위프트 버전 :
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 20
}
이 코드를 사용하여 각 항목 사이의 간격이 5px인지 확인하십시오.
- (UIEdgeInsets)collectionView:(UICollectionView *) collectionView
layout:(UICollectionViewLayout *) collectionViewLayout
insetForSectionAtIndex:(NSInteger) section {
return UIEdgeInsetsMake(0, 0, 0, 5); // top, left, bottom, right
}
- (CGFloat)collectionView:(UICollectionView *) collectionView
layout:(UICollectionViewLayout *) collectionViewLayout
minimumInteritemSpacingForSectionAtIndex:(NSInteger) section {
return 5.0;
}
가장 인기있는 답변의 신속한 버전. 셀 사이의 간격은 같습니다 cellSpacing
.
class CustomViewFlowLayout : UICollectionViewFlowLayout {
let cellSpacing:CGFloat = 4
override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
if let attributes = super.layoutAttributesForElementsInRect(rect) {
for (index, attribute) in attributes.enumerate() {
if index == 0 { continue }
let prevLayoutAttributes = attributes[index - 1]
let origin = CGRectGetMaxX(prevLayoutAttributes.frame)
if(origin + cellSpacing + attribute.frame.size.width < self.collectionViewContentSize().width) {
attribute.frame.origin.x = origin + cellSpacing
}
}
return attributes
}
return nil
}
}
IB를 사용하여 셀이나 행 사이의 간격을 구성하는 매우 쉬운 방법을 찾았습니다.
스토리 보드 / Xib 파일에서 UICollectionView를 선택 하고 아래 이미지에 지정된 크기 검사기 를 클릭하십시오 .
프로그래밍 방식으로 공간을 구성하려면 다음 속성을 사용하십시오.
1) 행간 간격을 설정합니다.
[self.collectionView setMinimumLineSpacing:5];
2) 항목 / 셀 사이의 공간을 설정합니다.
[self.collectionView setMinimumInteritemSpacing:5];
속성 이름 minimumInterItemSpacing을 참고하십시오 . 정확한 간격이 아닌 항목 간의 최소 간격 이됩니다 . minimumInterItemSpacing을 일부 값으로 설정하면 간격이 그보다 작은 값이되지 않도록 할 수 있습니다. 그러나 더 높은 가치를 얻을 가능성이 있습니다.
실제로 항목 사이의 간격은 여러 가지 요소 itemSize 및 sectionInset 에 따라 다릅니다 . 콜렉션보기는 이러한 값을 기반으로 컨텐츠를 동적으로 배치합니다. 따라서 정확한 간격을 보장 할 수 없습니다. sectionInset 및 minimumInterItemSpacing 과 함께 시행 착오를해야합니다 .
Swift 3.0, Xcode 8에 대한 답변
1. 컬렉션 뷰 델리게이트를 설정했는지 확인하십시오
class DashboardViewController: UIViewController {
@IBOutlet weak var dashboardCollectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
dashboardCollectionView.delegate = self
}
}
2. UICollectionViewDelegate가 아닌 UICollectionViewDelegateFlowLayout 프로토콜을 구현하십시오.
extension DashboardViewController: UICollectionViewDelegateFlowLayout {
fileprivate var sectionInsets: UIEdgeInsets {
return .zero
}
fileprivate var itemsPerRow: CGFloat {
return 2
}
fileprivate var interitemSpace: CGFloat {
return 5.0
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let sectionPadding = sectionInsets.left * (itemsPerRow + 1)
let interitemPadding = max(0.0, itemsPerRow - 1) * interitemSpace
let availableWidth = collectionView.bounds.width - sectionPadding - interitemPadding
let widthPerItem = availableWidth / itemsPerRow
return CGSize(width: widthPerItem, height: widthPerItem)
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
insetForSectionAt section: Int) -> UIEdgeInsets {
return sectionInsets
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0.0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return interitemSpace
}
}
는 대답을 투표 (또한 빠른 버전 ) 작은 문제를 가지고 : 오른쪽에 큰 간격이있을 것이다.
플로트 왼쪽 동작으로 셀 간격이 정확하도록 플로우 레이아웃이 사용자 정의 되었기 때문 입니다.
내 해결책은 섹션 삽입을 조작하여 섹션이 가운데에 정렬되도록하지만 간격이 정확하게 지정된 것입니다.
아래 스크린 샷에서 항목 / 줄 간격은 정확히 8pt이며 왼쪽 및 오른쪽 삽입 부분은 8pt보다 큽니다 (중앙 정렬되도록).
스위프트 코드는 다음과 같습니다.
private let minItemSpacing: CGFloat = 8
private let itemWidth: CGFloat = 100
private let headerHeight: CGFloat = 32
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Create our custom flow layout that evenly space out the items, and have them in the center
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: itemWidth, height: itemWidth)
layout.minimumInteritemSpacing = minItemSpacing
layout.minimumLineSpacing = minItemSpacing
layout.headerReferenceSize = CGSize(width: 0, height: headerHeight)
// Find n, where n is the number of item that can fit into the collection view
var n: CGFloat = 1
let containerWidth = collectionView.bounds.width
while true {
let nextN = n + 1
let totalWidth = (nextN*itemWidth) + (nextN-1)*minItemSpacing
if totalWidth > containerWidth {
break
} else {
n = nextN
}
}
// Calculate the section inset for left and right.
// Setting this section inset will manipulate the items such that they will all be aligned horizontally center.
let inset = max(minItemSpacing, floor( (containerWidth - (n*itemWidth) - (n-1)*minItemSpacing) / 2 ) )
layout.sectionInset = UIEdgeInsets(top: minItemSpacing, left: inset, bottom: minItemSpacing, right: inset)
collectionView.collectionViewLayout = layout
}
간격을위한 간단한 코드
let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
layout.minimumInteritemSpacing = 10 // Some float value
UICollectionViewDelegateFlowLayout
헤더 파일에서 프로토콜을 정의하십시오 .
다음과 같은 UICollectionViewDelegateFlowLayout
프로토콜 방법을 구현 하십시오.
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(5, 5, 5, 5);
}
여기 를 클릭 하여 Apple UIEdgeInsetMake
방법 설명서를보십시오 .
스토리 보드 접근법
스토리 보드에서 CollectionView를 선택하고 크기 관리자로 이동하여 셀과 선의 최소 간격을 5로 설정하십시오.
프로그래밍 방식으로 스위프트 5
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
//Provide Width and Height According to your need
let width = UIScreen.main.bounds.width / 4
let height = UIScreen.main.bounds.height / 10
layout.itemSize = CGSize(width: width, height: height)
//For Adjusting the cells spacing
layout.minimumInteritemSpacing = 5
layout.minimumLineSpacing = 5
return UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
}()
모노 터치를 사용하고 있으므로 이름과 코드가 약간 다르지만 collectionview의 너비가 (x * cell width) + (x-1) * x = amount의 MinimumSpacing과 같아야합니다. 행당 셀 수
MinimumInteritemSpacing 및 셀 너비에 따라 다음 단계를 수행하십시오.
1) 셀 크기 + 현재 삽입 + 최소 간격을 기반으로 행당 항목 수를 계산합니다.
float currentTotalWidth = CollectionView.Frame.Width - Layout.SectionInset.Left - Layout.SectionInset.Right (Layout = flowlayout)
int amountOfCellsPerRow = (currentTotalWidth + MinimumSpacing) / (cell width + MinimumSpacing)
2) 이제 컬렉션보기의 예상 너비를 계산하는 모든 정보가 있습니다.
float totalWidth =(amountOfCellsPerRow * cell width) + (amountOfCellsPerRow-1) * MinimumSpacing
3) 현재 너비와 예상 너비의 차이는
float difference = currentTotalWidth - totalWidth;
4) 이제 삽입을 조정하십시오 (이 예제에서는 오른쪽에 추가하여 collectionview의 왼쪽 위치가 동일하게 유지됨)
Layout.SectionInset.Right = Layout.SectionInset.Right + difference;
실제 셀 크기를 건드리지 않고 간격을 조정하려면 이것이 나에게 가장 적합한 솔루션입니다. #xcode 9 # tvOS11 # iOS11 #swift
따라서 UICollectionViewDelegateFlowLayout 에서 다음 메소드를 구현 변경하면 트릭은 두 가지를 모두 사용해야하며 문서는 실제로 그 방향으로 생각하도록 지시하지 않았습니다. :디
open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return cellSpacing
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return cellSpacing
}
OP와 비슷한 문제를 발견했습니다. 불행히도 수락 된 답변은 내용이 collectionView
올바르게 중앙에 배치되지 않았기 때문에 저에게 효과 가 없었습니다. 따라서 나는 다른 솔루션을 생각해 냈지만의 모든 항목 collectionView
이 같은 너비 를 갖기 만하면 문제의 경우처럼 보입니다.
#define cellSize 90
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
float width = collectionView.frame.size.width;
float spacing = [self collectionView:collectionView layout:collectionViewLayout minimumInteritemSpacingForSectionAtIndex:section];
int numberOfCells = (width + spacing) / (cellSize + spacing);
int inset = (width + spacing - numberOfCells * (cellSize + spacing) ) / 2;
return UIEdgeInsetsMake(0, inset, 0, inset);
}
이 코드는에 의해 반환 된 값 ...minimumInteritemSpacing...
이 모든 사이의 정확한 간격이 collectionViewCell
되도록하고 셀이 모두 중앙에 집중되도록 보장합니다.collectionView
수평 UICollectionView
및 하위 클래스가 UICollectionViewFlowLayout
있습니다. 컬렉션보기에는 큰 셀이 있으며 한 번에 한 행만 표시되며 컬렉션보기는 화면 너비에 맞습니다.
나는 iago849의 대답을 시도했지만 효과가 있었지만 그의 대답이 필요하지 않다는 것을 알았습니다. 어떤 이유로 든 설정하면 minimumInterItemSpacing
아무것도하지 않습니다. 내 항목 / 셀 사이의 간격은에 의해 완전히 제어 할 수 있습니다 minimumLineSpacing
.
왜 이런 식으로 작동하는지 확실하지 않지만 작동합니다.
위의 솔루션 으로 vojtech-vrbka은 정확하지만 경고를 트리거 :
경고 : UICollectionViewFlowLayout이 인덱스 경로에 대해 캐시 된 프레임 불일치를 캐시했습니다. 캐시 된 값 : 플로우 레이아웃 서브 클래스 Layout이 UICollectionViewFlowLayout에 의해 리턴 된 속성을 복사하지 않고 수정하므로 발생합니다.
다음 코드는이를 수정해야합니다.
class CustomViewFlowLayout : UICollectionViewFlowLayout {
let cellSpacing:CGFloat = 4
override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let original = super.layoutAttributesForElementsInRect(rect)
if let original = original {
let attributes = NSArray.init(array: original, copyItems: true) as! [UICollectionViewLayoutAttributes]
for (index, attribute) in attributes.enumerate() {
if index == 0 { continue }
let prevLayoutAttributes = attributes[index - 1]
let origin = CGRectGetMaxX(prevLayoutAttributes.frame)
if(origin + cellSpacing + attribute.frame.size.width < self.collectionViewContentSize().width) {
attribute.frame.origin.x = origin + cellSpacing
}
}
return attributes
}
return nil
}
}
스위프트 3 버전
UICollectionViewFlowLayout 서브 클래스를 작성하고이 메소드를 붙여 넣기 만하면됩니다.
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
guard let answer = super.layoutAttributesForElements(in: rect) else { return nil }
for i in 1..<answer.count {
let currentAttributes = answer[i]
let previousAttributes = answer[i - 1]
let maximumSpacing: CGFloat = 8
let origin = previousAttributes.frame.maxX
if (origin + maximumSpacing + currentAttributes.frame.size.width < self.collectionViewContentSize.width && currentAttributes.frame.origin.x > previousAttributes.frame.origin.x) {
var frame = currentAttributes.frame
frame.origin.x = origin + maximumSpacing
currentAttributes.frame = frame
}
}
return answer
}
나는 iago849의 답변을 시도했지만 효과가있었습니다.
스위프트 4
open override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
guard let answer = super.layoutAttributesForElements(in: rect) else {
return nil
}
let count = answer.count
for i in 1..<count {
let currentLayoutAttributes = answer[i]
let prevLayoutAttributes = answer[i-1]
let origin = prevLayoutAttributes.frame.maxX
if (origin + CGFloat(spacing) + currentLayoutAttributes.frame.size.width) < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x {
var frame = currentLayoutAttributes.frame
frame.origin.x = origin + CGFloat(spacing)
currentLayoutAttributes.frame = frame
}
}
return answer
}
다음은 github 프로젝트의 링크입니다. https://github.com/vishalwaka/MultiTags
이전 버전은 섹션 1에서 실제로 작동하지 않았습니다. 따라서 내 솔루션은 https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/ 에서 찾을 수 있습니다 . 게으른 사람들을 위해 :
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let attributesForElementsInRect = super.layoutAttributesForElements(in: rect)
var newAttributesForElementsInRect = [UICollectionViewLayoutAttributes]()
// use a value to keep track of left margin
var leftMargin: CGFloat = 0.0;
for attributes in attributesForElementsInRect! {
let refAttributes = attributes
// assign value if next row
if (refAttributes.frame.origin.x == self.sectionInset.left) {
leftMargin = self.sectionInset.left
} else {
// set x position of attributes to current margin
var newLeftAlignedFrame = refAttributes.frame
newLeftAlignedFrame.origin.x = leftMargin
refAttributes.frame = newLeftAlignedFrame
}
// calculate new value for current margin
leftMargin += refAttributes.frame.size.width + 10
newAttributesForElementsInRect.append(refAttributes)
}
return newAttributesForElementsInRect
}
수락 된 답변에 문제가있어서 업데이트했습니다.
.h
@interface MaxSpacingCollectionViewFlowLayout : UICollectionViewFlowLayout
@property (nonatomic,assign) CGFloat maxCellSpacing;
@end
.미디엄
@implementation MaxSpacingCollectionViewFlowLayout
- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
if (attributes.count <= 0) return attributes;
CGFloat firstCellOriginX = ((UICollectionViewLayoutAttributes *)attributes[0]).frame.origin.x;
for(int i = 1; i < attributes.count; i++) {
UICollectionViewLayoutAttributes *currentLayoutAttributes = attributes[i];
if (currentLayoutAttributes.frame.origin.x == firstCellOriginX) { // The first cell of a new row
continue;
}
UICollectionViewLayoutAttributes *prevLayoutAttributes = attributes[i - 1];
CGFloat prevOriginMaxX = CGRectGetMaxX(prevLayoutAttributes.frame);
if ((currentLayoutAttributes.frame.origin.x - prevOriginMaxX) > self.maxCellSpacing) {
CGRect frame = currentLayoutAttributes.frame;
frame.origin.x = prevOriginMaxX + self.maxCellSpacing;
currentLayoutAttributes.frame = frame;
}
}
return attributes;
}
@end
Swift 3
Instagram과 같은 셀 라인 간격 내 솔루션 :
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.backgroundColor = UIColor.rgb(red: 227, green: 227, blue: 227)
cv.showsVerticalScrollIndicator = false
layout.scrollDirection = .vertical
layout.minimumLineSpacing = 1
layout.minimumInteritemSpacing = 1
return cv
}()
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
switch UIDevice.current.modelName {
case "iPhone 4":
return CGSize(width: 106, height: 106)
case "iPhone 5":
return CGSize(width: 106, height: 106)
case "iPhone 6,7":
return CGSize(width: 124, height: 124)
case "iPhone Plus":
return CGSize(width: 137, height: 137)
default:
return CGSize(width: frame.width / 3, height: frame.width / 3)
}
}
프로그래밍 방식으로 장치를 감지하는 방법 : https://stackoverflow.com/a/26962452/6013170
이 방법으로 놀아보십시오.
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
insetForSectionAtIndex:(NSInteger)section {
UIEdgeInsets insets = UIEdgeInsetsMake(?, ?, ?, ?);
return insets;
}
참고 URL : https://stackoverflow.com/questions/17229350/cell-spacing-in-uicollectionview