2017-03-01 1 views
0

J'ai des cellules de vue de table qui contiennent, entre autres, une vue de pile. La vue de pile ne doit être dans une cellule que si certaines conditions sont vraies. Sinon, la hauteur de la cellule devrait être réduite. Lorsque j'utilise .isHidden, la hauteur reste la même. Mais je veux que la vue de la pile soit retirée de cette cellule.Swift 3 Vue de table - Suppression d'une vue de pile de certaines cellules

Voici mon code:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "RumCell", for: indexPath) as! RumCell 

    let currentRum: Rum 
    currentRum = rumList[indexPath.row] 

    cell.rum = currentRum 

    if (cell.rum?.clubRatingJuicy == 0) && (cell.rum?.clubRatingGasy == 0) && (cell.rum?.clubRatingSpicy == 0) && (cell.rum?.clubRatingSweet == 0) { 
     cell.frame.size.height -= 76 
    } 

    return cell 
} 

Comme vous pouvez le voir, j'ai essayé de réduire la hauteur de la cellule, mais cela ne fonctionne pas. J'ai également essayé ceci, qui ne fonctionne pas:

if (cell.rum?.clubRatingJuicy == 0) && (cell.rum?.clubRatingGasy == 0) && (cell.rum?.clubRatingSpicy == 0) && (cell.rum?.clubRatingSweet == 0) { 
     cell.tastStack.removeFromSuperview() 
    } 

Quelqu'un peut me dire s'il vous plaît comment faire cela?

+0

Pouvez-vous essayer d'ajouter 'self.tableView.beginUpdates()' et 'self.tableView.endUpdates()' af ter vous supprimez la vue de la pile et calculez votre nouvelle hauteur? – ronatory

Répondre

0

vous devez utiliser différents prototypes de cellules RumCell (sans stackview) et RumCellDetailed (avec stackview) qui sont tous deux conformes à un protocole RumCellProtocol (où vous pouvez définir le rum var)

protocol RumCellProtocol { 
    func config(rum: Rum) 
} 

et ce code:

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

    var cellIdentifier = "RumCellDetailed" 

    if (cell.rum?.clubRatingJuicy == 0) && (cell.rum?.clubRatingGasy == 0) && (cell.rum?.clubRatingSpicy == 0) && (cell.rum?.clubRatingSweet == 0) { 
     cellIdentifier = "RumCell" 
    } 


    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RumCellProtocol 

    let currentRum: Rum 
    currentRum = rumList[indexPath.row] 

    cell.config(rum: currentRum) 

    return cell 
} 
0

code Essayez de la hauteur dynamique et sans contrainte donner la hauteur fixe dans la cellule tableView

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    return UITableViewAutomaticDimension 
} 
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    return 100.0 
} 
0

Vous devriez pas définir des cadres de cellules. Ce n'est pas ainsi que fonctionne TableViews. Si les hauteurs de cellules sont dynamiques, @Theorist est correct. Dans le cas contraire, vous pouvez mettre en œuvre

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath:  NSIndexPath) -> CGFloat 
{ 
    if let cell = tableView.cellForRowAtIndexPath(indexPath), let rum = cell.rum, rum.clubRatingJuicy == 0 && rum.clubRatingGasy == 0 && rum.clubRatingSpicy == 0 && rum.clubRatingSweet == 0 { 
    return {no stackview height} //whatever the height should be for no stackview 
} 
    return {normal height} //whatever your value is 
}