2016-03-14 6 views
0

Я создаю EPG (Electronic Program Guide); для получения информации о программе я использую JSON. Для дизайна у меня есть табличный вид в левой половине для логотипа и имени канала, а в правой половине - просмотр коллекции для всех телевизионных программ для этого канала. Дело в том, что для каждого шоу строка просмотра коллекции должна иметь разную ширину, которая зависит от продолжительности показа.Изменение ширины ячейки ячейки просмотра во время выполнения

Я строй его на основе этого фантастического примера называется: EPG Grid

Но в этом примере, все каналы загружены ранее в одном массиве. Это прекрасно работает, если список каналов короток, но в моем случае список очень большой, поэтому мне нужно загрузить каждый канал в tableView:cellForRowAtIndexPath:, а затем создать макет с указанной шириной.

Любые мысли об этом?

ответ

0

Я понял, моим сам, вещь в моем случае не использовать UICollectionViewLayout (CustomLayout) использовать макет Flow и добавить collectionView внутри tableView так:

enter image description hereenter image description here

Тогда в каждой строке от tableView делегат collectionView.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{   
    let cell: CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell 

    cell.collectionView.delegate = self 
    cell.collectionView.dataSource = self 
    cell.collectionView.tag = indexPath.row 

    cell.tag = 100 + indexPath.row; 

    return cell; 
} 

После делегата, метод collectionView:sizeForItemAtIndexPath называется, по этому методу вы должны рассчитать ширину или высоту получения данных с использованием indexPath

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
{ 
    //Calculation of width based on indexPath 

    //... 
    return CGSizeMake(width, 89) 
} 

Наконец, для создания свитки формы для всех клеток, в том же используйте метод scrollViewDidScroll. Проверьте этот пост: Horizontally scroll ALL rows of UICollectionView together

func scrollViewDidScroll(scrollView: UIScrollView) { 

    var ret: Bool = false; 

    if (self.lastContentOffset > scrollView.contentOffset.x) 
    { 
     ret = true; 
    } 
    else if (self.lastContentOffset < scrollView.contentOffset.x) 
    { 
     ret = true; 
    }   

    if(scrollView.isKindOfClass(UICollectionView) && ret) 
    { 
     self.lastContentOffset = scrollView.contentOffset.x; 
     for var i = 0; i < data.count; i++ 
     { 
      let cell = self.view.viewWithTag(100 + i) as? ChannelTableViewCell; 

      if(cell != nil) 
      { 
       let collectionCell: UICollectionView? = cell?.collectionView; 

       if(collectionCell != nil) 
       { 
        collectionCell!.contentOffset = scrollView.contentOffset; 
       } 
      } 
     } 
    } 
} 
Смежные вопросы