2017-04-06 19 views
0

나는 UICollectionViewDelegateUICollectionViewDataSource을 사용하여 UIViewController에 확장자가 있으며 Instagram처럼 레이아웃에 내 셀을 가져 오는 방법을 모른다.UICollectionView에서 인스턴스 간 그림처럼 픽셀 간격이 1 인 3 열을 반환하도록하려면 어떻게해야합니까? Swift

extension ProfileViewController: UICollectionViewDelegate, UICollectionViewDataSource { 

    func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 3 
    } 

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as? MediaCollectionViewCell else { return MediaCollectionViewCell() } 
     cell.userMedia = userMedias[indexPath.row] 
     return cell 
    } 

    // MARK: - Navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "toMediaDetail" { 
      guard let mediaDetailViewController = segue.destination as? MediaDetailViewController, 
       let indexPath = collectionView.indexPathsForSelectedItems?.first else { return } 

      let userMedia = self.userMedias[indexPath.row] 

      mediaDetailViewController.userMedia = userMedia 
     } 
    } 
} 
+0

'uicollectionview set columns 수'에 대한 Google 검색을 제안합니다. 답변, 기사, 예제 등이 많이 보입니다. 약간의 연구와 당신이 맞는 것을 찾을 수있을 것입니다. 필요합니다. – DonMag

답변

0

이러한 기능이 작동하지 않을 수도 있지만 이러한 기능을 사용하면 결과를 얻는 데 필요한 것이 있습니다. 첫 번째 두 기능 중 하나만 필요할 수도 있고 세 번째 기능은 선택적 일 수도 있습니다. 여기에서 얻을 수있는 많은 다른 유형의 결과가 있습니다.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionView, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { 
    return 1 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsMake(1, 1, 1, 1) 
} 

// This function may or may not be required depending 
// on what data you are using to populate the collection view 
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { 
    let collectionViewRect: CGRect = collectionView.bounds 
    let collectionViewWidth: CGFloat = collectionViewRect.size.width 

    // Replace userMedias.count with the number of cells in one row 
    // if that changes or if a row is not constrained to a single line 
    let cellWidth: CGFloat = collectionViewWidth/userMedias.count 

    // Replace the divisor with the column count requirement. Make sure to have it in float. 
    let size: CGSize = CGSize(width: cellWidth, height: cellWidth) 
    return size 
} 

당신은 SizeForItemAtIndexPath는 세트가있는 셀의 적절한 크기를 제공하는지 확인하고 그에 따라 세트를 제공해야합니다.

마지막 팁 한 번 ... 컬렉션보기로 작업 할 때 나는 SizeForItemAtIndexPath를 사용할 때 네 개의 모든 벽에 대한보기를 제한하지 않습니다. 나는 셀의 위쪽과 왼쪽 벽에만 구속하면서 비례 폭과 높이를 만들려고합니다. 이 작업을 수행하지 않으면 부적절하게 크기를 조정하는 셀에 문제가 있습니다.

2

스토리 보드를 사용하고 있는지 확실하지 않습니다. 스토리 보드를 사용하는 경우 스토리 보드에서 셀 크기를 구성 할 수 있습니다. insetForSectionAtIndex를 UIEdgeInsetsMake (0, 0, 1, 1)로 설정하면 셀 사이에 1 픽셀의 공간을 줄 수 있습니다. 이 도움이 될

희망 : 사이에 1 픽셀 간격

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsMake(0, 0, 1, 1) 
} 

UICollection 셀.