2016-12-27 5 views
0

У меня есть UITableViewController с каждым UITableViewCell, содержащим UICollectionView, где содержимое UICollectionView должно быть полностью видимым. Моя проблема заключается в том, что при возврате высоты UITableViewCell я не могу вернуть правильную высоту, потому что я не могу вычислить, как рассчитать contentSizeUICollectionView для его содержимого.UICollectionView внутри UITableViewCell, UITableView Динамическая высота

+1

Вы хотите, чтобы http://eithanshavit.com/2015/04/18/Dynamic_Size_UICollectionView_Cell.html – Amanpreet

+0

вы можете показать код? и почему бы не использовать полный просмотр коллекции, а не добавлять его в таблицу? – Joshua

+0

Код указан в этом URL-адресе: https://drive.google.com/file/d/0B3bD5h4vCJXcc2hnSWk0TXd1LWs/view?usp=sharing –

ответ

0

Да, вы можете это сделать. Вам нужно установить оценочную высоту для tableview как welll, если вы хотите динамическую высоту таблицы.

tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight 

Вы должны убедиться, что ваши клетки имеют точно такую ​​же высоту, как и коллекции view.when вы настроите ваши клетки в наружном Tableview пытаются перезагрузить свои данные во внутреннем CollectionView иначе из-за многократного использования логической ячейки API будет не различать предыдущий просмотр коллекции.

Обновлено:

У меня был случай, когда я должен был хранить TableView внутри клетки.

Внутренняя ячейка выглядит так, как показано в таблице.

@IBOutlet weak var uploadedDocumentsTableView: UITableView! // has 0 to left right top botton margin to superview on storyboard prototype (Contenview) 
    @IBOutlet weak var tableViewCellHeight: NSLayoutConstraint! //To constraint the height of the tableview inside the cell. 


    //This function is called when the outer tableview delegate calls cellForRowAtIndexPath to deque a cell. 
    override func setupWithCellModel(cellModel: CRCustomerAreaDetailsCellModel) { 

    let castedCellModel = cellModel as? CRCustomerAreaDocumentUploadCellModel 
    if let documents = castedCellModel?.docUploadItem?.documents { 
     tableViewCellHeight.constant = CGFloat(documents.count * 60) 
    } 
    uploadedDocumentsTableView.reloadData() 
    } 

Обыкновенное

extension CRCustomerAreaDocumentUploadV2GalleryCell: UITableViewDataSource { 

public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 60 
} 

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let castedCellModel = cellModel as? CRCustomerAreaDocumentUploadCellModel 
    if let documents = castedCellModel?.docUploadItem?.documents { 
     return documents.count 
    } 
    return 0 
} 

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    ... 
    //Return your cell 
} 

}

высота моего наружными Tableview рассчитывается путем автоматического измерения, но и для внутренней Tableview я должен указать высоту самостоятельно.

+0

Я уже это сделал .. это прекрасно работает в других случаях ... но в случае из UICollectionVIew внутри UITableviewCell ... это не работает должным образом ... –

+0

UIScrollView не имеет правильного внутреннего содержимого. –

+0

Да, конечно, но вы можете сохранить его в свойстве, если все строки представления коллекции имеют одинаковую высоту.(numberOfrows * rowheight) –

0

Я много раз читал об этом. Вы не должны ставить CollectionView внутри TableViewCell. Это может вызвать множество проблем (например, капли кадров). Вы пытались использовать StackView вместо этого? Вы пробовали AsyncDiplayKit?

+0

Мое требование состоит в том, что у меня есть вертикальная динамическая прокручиваемая страница с динамическими горизонтальными прокручиваемыми элементами ... любые другие идеи для этого ... UIStackView в этом случае не поможет –

0

Извините, но вы не можете использовать UITableViewAutomaticDimension для определения размера ячейки с помощью UICollectionView внутри, потому что представление коллекции не имеет правильного внутреннего содержимого. Вы должны перегрузить height метод UITableViewDelegate:

- (CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath; 

И вернуть правильную высоту от этого метода.

Другим способом создать настраиваемое представление, содержащее UICollectionView и контролирует содержание представления коллекции (пример из моего кода):

- (CGSize)intrinsicContentSize 
{ 
    CGSize size = CGSizeMake(UIViewNoIntrinsicMetric, self.collectionView.collectionViewLayout.collectionViewContentSize.height); 

    return size; 
} 

- (void)addTags:(NSArray<BLTag*>*)tags 
{ 
    [_tagsList addObjectsFromArray:tags]; 

    [self _reloadData]; 
} 

Этого вид возвращает правильного размер внутреннего содержания, следовательно, вы можете вставить его в ячейку с автоматическая высота.

Смежные вопросы