web-dev-qa-db-fra.com

espacement entre UITableViewCells Swift3

Je crée une application IOS dans Swift et souhaite ajouter un espacement entre les cellules de ce type.

 enter image description here

Je voudrais donner un espace de chaque cellule de vue de table identique à mon image d'attache .. Comment puis-je faire cela? et maintenant toutes les cellules arrivent sans aucun espace . Swift3

4
Ankit Kumawat

vous pouvez essayer ceci dans votre classe de cellule tableView:

class cell: UITableViewCell{
override var frame: CGRect {
    get {
        return super.frame
    }
    set (newFrame) {
        var frame =  newFrame
        frame.Origin.y += 4
        frame.size.height -= 2 * 5
        super.frame = frame
    }
  }
}
7
user8336100

Mise à jour: la méthode UIEdgeInsetsInsetRect est remplacée maintenant vous pouvez le faire comme ceci

contentView.frame = contentView.frame.inset(by: margins)

Swift 4 réponse:

dans votre classe de cellule personnalisée, ajoutez cette fonction

override func layoutSubviews() {
    super.layoutSubviews()
    //set the values for top,left,bottom,right margins
            let margins = UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 0)
    contentView.frame = UIEdgeInsetsInsetRect(contentView.frame, margins)
}

Vous pouvez changer les valeurs selon vos besoins

***** Remarque ***** Appelant la super fonction 

super.layoutSubviews()

est très important sinon vous entrerez dans des problèmes étranges

2
Gulfam Khan
  1. Dans Storyboard, votre hiérarchie de vues devrait ressembler à ceci. View CellContent (comme surligné) contiendra tous les composants.

 enter image description here

  1. Donnez une marge à View CellContent de 10px à partir du haut, du bas, à partir de son aperçu.

  2. Maintenant, sélectionnez la tblCell et changez la couleur d'arrière-plan.

 enter image description here

 enter image description here

  1. Maintenant, lancez votre projet, assurez-vous que le délégué et la source de données sont correctement liés.

SORTIE

 enter image description here

NOTE: Je viens d'ajouter 1 UILabel dans View CellContent à des fins factices.

1
dahiya_boy

Une méthode simple consiste à afficher la collection au lieu de la table et à donner un espacement des cellules à la vue et à l’utilisation de la collection.

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
    let widthSize = collectionView.frame.size.width / 1
    return CGSize(width: widthSize-2, height: widthSize+20)
}

Et si vous souhaitez uniquement une vue de table, ajoutez une vue d’arrière-plan en tant que conteneur et définissez la couleur d’arrière-plan blanc et la couleur claire de fond de cellule. 

backgroundView.layer.cornerRadius = 2.0
backgroundView.layer.masksToBounds = false
backgroundView.layer.shadowColor = UIColor.black.withAlphaComponent(0.2).cgColor
1
234 Shk

Si vous utilisez UITableViewCell pour réaliser ce type de mise en page, rien ne permet de fournir un espacement entre UITableViewCells.

Voici les options que vous pouvez choisir:

  1. Créez une UIView personnalisée dans UITableViewCell avec clear background, afin qu'elle ressemble à l'espacement entre les cellules.

 enter image description here

Vous devez définir le background as clear sur: cell, content view.

  1. Vous pouvez utiliser UICollectionView au lieu de UITableView. Il est beaucoup plus flexible et vous pouvez le concevoir comme vous le souhaitez.

Faites-moi savoir si vous souhaitez plus de détails à ce sujet.

1
PGDev

Essayez-le. Cela fonctionne bien pour moi.

Vous pouvez utiliser la section au lieu de la ligne . Vous renvoyez le nombre de tableaux dans la méthode numberOfSectionsInTableView et définissez 1 dans la méthode numberOfRowsInSection

Utilisez [array objectAtIndex:indexPath.section] dans la méthode cellForRowAtIndexPath.

Définissez la heightForHeaderInSection sur 40 ou selon vos besoins. 

Merci, j'espère que ça vous aidera

0
Sanjukta

- Espacement UITableViewCell défini de manière statique - Swift 4 - Pas complètement testé.

Définissez la hauteur de votre table tableView sur la valeur que vous préférez.

 override func viewDidLoad() {
    super.viewDidLoad()
    tableView.estimatedRowHeight = <Your preferred cell size>
    tableView.rowHeight = UITableViewAutomaticDimension
    // make sure to set your TableView delegates
    tableView.dataSource = self
    tableView.delegate = self
}

 extension YourClass : UITexFieldDelegate, UITextFieldDataSource {
    //Now set your cells.
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "yourCell", for: indexPath) as! UITableViewCell

        //to help see the spacing.
        cell.backgroundColor = .red
        cell.textLabel?.text = "Cell"

        return cell
   }
   //display 3 cells
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
   }

   //now lets insert a headerView to create the spacing we want. (This will also work for viewForHeaderInSection)
   func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    //you can create your own custom view here
    let view = UIView()
    view.frame = CGRect(x: 0, y: 0, width: tableView.frame.width, height: 44) //size of a standard tableViewCell

    //this will hide the headerView and match the tableView's background color.
    view.backgroundColor = UIColor.clear
    return view
 }

  func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 44
  }
}
0
A. Welch