2017-01-03 5 views
0

나는 UITableView을 가지고 있고 내부에는 두 개의 UICollectionViews이 있습니다.UICollectionView에 따라 UITableViewCell 높이를 설정하는 방법 Content size?

내 요구 사항은 처음으로 스크롤해야합니다. UICollectionView 가로. 그리고 나는 스크롤해야한다. UITableView 세로로 스크롤하고 싶지 않기 때문에 UICollectionView 두번째.

이미지에서 처음으로 (머리글 '폴더') UICollectionView 가로 스크롤해야하고 두 번째 (머리글 '제품') UICollectionViewUITableView 스크롤해야하기 때문에 세로로 스크롤 싶지 않아요.

모두 collectionViewTableViewCell이고 두 번째는 스크롤을 사용하지 않도록 설정했습니다. UICollectionView.

제품을 추가하고 삭제해야하는 이유는 무엇입니까? TableViewSecond 셀 높이를 설정해야합니다.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    if (0 == indexPath.section) { 
     var addFolderCell = tableView.dequeueReusableCell(withIdentifier: "AddFolderCell") as? AddFolderCell 

     if(nil == addFolderCell) { 
      let nib:Array = Bundle.main.loadNibNamed("AddFolderCell", owner: self, options: nil)! 
      addFolderCell = nib[0] as? AddFolderCell 
     } 

     addFolderCell?.collectionView.delegate = self 
     addFolderCell?.collectionView.dataSource = self 

     return addFolderCell! 
    } else { 
     let identifier = "CreateFolderCell" 
     var createFolderCell = tableView.dequeueReusableCell(withIdentifier: identifier) as? CreateFolderCell 

     if(createFolderCell == nil) { 
      let nib:Array = Bundle.main.loadNibNamed("CreateFolderCell", owner: self, options: nil)! 
      createFolderCell = nib[0] as? CreateFolderCell 
     } 

     return createFolderCell! 
    } 
} 

//Height for row. 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    //let index : NSIndexPath = NSIndexPath(row: 0, section: 1) 
    if 0 == indexPath.section { 
     return 135 
    } 
    return 300 
} 

// 헤더 높이 : 여기

enter image description here

enter image description here

내 코드입니다.

func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat { 
    return 20 
} 

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return sectionsArray[section] as? String 
} 
} 

extension GroupDataView : UICollectionViewDelegate,UICollectionViewDataSource { 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 4 
    } 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AddFolderCollectionCell", for: indexPath) as! AddFolderCollectionCell 

    //cell.backgroundColor = UIColor.white 
    cell.layer.borderWidth = 0.4 
    cell.layer.borderColor = UIColor.lightGray.cgColor 
    cell.layer.cornerRadius = 2 
    //CreateCardView(viewCorner: cell.cardView) //cell.cardView 
    return cell 
    } 
} 

// MARK : 컬렉션보기 레이아웃

extension GroupDataView : UICollectionViewDelegateFlowLayout { 

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

내가 무엇을 할 수 있습니까? 어떻게하면 tableView 높이를 설정할 수 있습니까?

+0

tableView.rowHeight? 스토리 보드에 정의 된대로? – OhadM

+0

예. 두 번째 collectionView 내용 크기에 따라 두 번째 셀 높이가 설정되기 때문에 어떻게 설정할 수 있습니까? 감사합니다. – kishor0011

+0

ViewLayout 메서드를 재정 의하여 작업해야하기 때문에 올바른 방향을 향한 것처럼 보입니다. 문제는 컬렉션 뷰 셀의 높이를 테이블 뷰 셀 높이로 전달하는 것입니까? – OhadM

답변

1

난 당신이 몇 몇 단계를 사용하여이 작업을 수행 할 수 있다고 생각 :

  1. 서브 클래스가 UITableViewCell,의는 CollectionCell 이름, 새로운 서브 클래스의 이름으로 IB 인터페이스에서 그것의 클래스를 변경할 수 있습니다.

  2. UICollectionView에서 CollectionCell까지 콘센트를 생성합니다. 여기에서 UICollectionView이 배치됩니다. 그것을 collectionView이라고 부르 자.

  3. 셀 경계에 collectionView의 모든면에 제약 조건을 추가합니다. (상단, 오른쪽, 아래, 왼쪽).

  4. collectionView 높이 제약 조건에 IB를 추가하고 CollectionCell에도 콘센트를 만듭니다. 그것을 collectionViewHeight이라고 부르 자. tableView:cellForRowAtIndexPath: 추가 코드에서

  5. :

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
        // ... 
        // normal cell declarations you wish 
        // ... 
    
        (cell as! CollectionCell).collectionView.reloadData() 
        let height = cell.collectionView.collectionViewLayout.collectionViewContentSize.height 
        (cell as! CollectionCell).collectionViewHeight.constant = height 
        return cell 
    } 
    
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
        return 100 // <- Your Desired Height 
    } 
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
        return UITableViewAutomaticDimension 
    }