J'ai une question à propos de UITableView ... J'ai un UITableViewController et j'ai créé une cellule personnalisée . Lorsque je visualise le tableau, je vois un petit espace blanc devant la ligne de séparation, comme vous pouvez le voir dans cette capture d'écran:
Pourquoi? C'est une visualisation par défaut? Puis-je changer quelque chose pour supprimer ce rembourrage blanc à gauche?
L'espace blanc de début est fourni par défaut dans iOS 7, même pour les cellules personnalisées.
Vérifiez cette propriété separatorInset
de UITableviewCell pour supprimer/ajouter un espacement des blancs aux deux extrémités du séparateur de ligne de la cellule.
// Supprimer les espaces
cell.separatorInset = UIEdgeInsetsZero;
Alternativement, au niveau UITableView, vous pouvez utiliser cette propriété -
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { // Safety check for below iOS 7
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
-(void)viewDidLayoutSubviews
{
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
Alternativement, vous pouvez également éditer ceci dans le constructeur d'interface (IB):
Cela a le même effet que la réponse de @ Ashok, mais n'exige pas l'écriture de code.
Mise à jour Fonctionne sur iOS 7 et 8
Mise à jour Fonctionne sur iOS 9
Utilisez le code ci-dessous pour supprimer le remplissage indésirable dans UITableView. Cela fonctionne à la fois sur IOS 8 et 7
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)])
{
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([tableView respondsToSelector:@selector(setLayoutMargins:)])
{
[tableView setLayoutMargins:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)])
{
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
Il n'y a pas d'espace blanc! Je suis entré dans un bogue à ce sujet, Apple vient de le fermer comme "pas un bogue", mais il m'a dit pourquoi ce n'est pas un bogue. J'ai écrit un projet simple qui définit une couleur pour chaque vue possible dans l'application. Ce que je vois, c’est que la couleur de ces pixels est en réalité la couleur d’arrière-plan de la cellule elle-même (et non la contentsView!), Comme Apple me l’avait dit.
Cell.contentView.backgroundColor est vert et la couleur de cell.background est rouge (pris avec Pixie):
Au final, sans séparateur, cell.contentView remplit complètement la cellule. Avec un séparateur, il y a un pixel ou deux espaces en bas. Le séparateur, lorsqu'il est inséré, remplit la majeure partie de l'espace, mais certains pixels de la cellule apparaissent ensuite.
Mystère résolu!
EDIT: Il semble que, selon la manière dont vous configurez votre Storyboard, le contentView.backgroundColor soit "perdu" ou défini sur Blanc. Si vous en faites trop lorsque vous fournissez des cellules, vous pouvez obtenir le comportement souhaité:
let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell
cell.backgroundColor = UIColor.redColor()
cell.contentView.backgroundColor = UIColor.greenColor()
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
}
Celui-ci a fonctionné pour moi
Merci
Cela a fait le tour pour moi:
cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
Pour ceux d'entre vous qui souhaitent conserver les paramètres UIEdgeInsetS dans Swift et n'utilisent pas les Storyboards
Avant: (comportement par défaut)
__extrait de code__
Add the following code:
tableView.separatorInset.right = tableView.separatorInset.left
Voici une extension de UITableViewCell Class pour Swift 3 et versions ultérieures
extension UITableViewCell
{
func removeSeparatorLeftPadding() -> Void
{
if self.responds(to: #selector(setter: separatorInset)) // Safety check
{
self.separatorInset = UIEdgeInsets.zero
}
if self.responds(to: #selector(setter: layoutMargins)) // Safety check
{
self.layoutMargins = UIEdgeInsets.zero
}
}
}
Usage:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")!
// .. Your other code
cell.removeSeparatorLeftPadding()
return cell
}
J'espère que cela aide quelqu'un!
Naresh.