2016-04-13 15 views
0

UICollectionViewで水平フローレイアウトの実際のinterItemSpacingを取得するにはどうすればよいですか?私が得ることのできる唯一の情報はminimumInteritemSpacingです。実際のUICollectionViewアイテムの間隔を取得

私はいつも(私は式中interItemSpacingの現在の値とminimumInteritemSpacingを交換したい)にかかわらず、画面サイズにコレクションビューに3均等幅の項目を表示するには、次の小さな計算のためにそれを必要とする: flowLayout.itemSize = CGSizeMake((_collectionView.frame.size.width/3.0)-(flowLayout.minimumInteritemSpacing/3.0), _collectionView.frame.size.height);私はこの計算をviewDidLayoutSubviewsに入れてください。現在のinterItemSpacingminimumInteritemSpacing

とは異なるため、一部の画面では正確に動作しません。この試みる固定間隔を有する細胞を作成するため

答えて

1

:詳細について

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 
} 

を、この優れた記事:

http://samwize.com/2015/11/30/understanding-uicollection-flow-layout/

関連する問題