Problème Xcode 7 iOS 9 UITableViewCell Separator Inset

Ce n’est pas une question, mais plutôt une solution au problème que j’ai rencontré.

Dans Xcode 7, lorsque l’application est exécutée sur iOS 9 sur des périphériques iPad, les cellules UITableView laissent une marge sur le côté gauche de la tableview. Et la rotation de l’appareil en paysage augmenterait les marges.

La solution que j’ai trouvée est la suivante:

Définir “cellLayoutMarginsFollowReadableWidth” sur NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO; 

Depuis, cette propriété est uniquement disponible dans iOS 9. Vous devrez donc mettre une condition pour vérifier la version d’iOS, sinon elle se bloquera.

 if(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_1) { self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO; } 

J’espère que c’est utile aux autres.

Meilleure solution pour iOS 9 et supérieur

Cela est dû à une nouvelle fonctionnalité appelée guides de contenu lisibles. Il fournit des marges adaptées à la lecture. Donc, dans l’iPhone et le portrait iPad, ce sont des marges très petites, mais dans le paysage iPad, elles sont plus grandes. Dans iOS 9, les marges de cellule de UITableView sont définies par défaut comme suit le guide de contenu lisible.

Si vous souhaitez arrêter cela, définissez simplement la propriété cellLayoutMarginsFollowReadableWidth de la cellLayoutMarginsFollowReadableWidth sur NO/false .

Source: https://forums.developer.apple.com/thread/5496

Solution parfaite jusqu’à iOS 9

Dans viewDidLoad

Objectif c

 - (void)viewDidLoad { [super viewDidLoad]; //Required for iOS 9 if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 9.0) { self.testTableView.cellLayoutMarginsFollowReadableWidth = NO; } } 

Rapide

  override func viewDidLoad() { super.viewDidLoad() if #available(iOS 9.0, *) { tableViewDiet.cellLayoutMarginsFollowReadableWidth = false } } 

Dans les méthodes TableViewDelegate, ajoutez le code suivant:

Objectif c

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // Remove seperator inset if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } // Prevent the cell from inheriting the Table View's margin settings if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) { [cell setPreservesSuperviewLayoutMargins:NO]; } // Explictly set your cell's layout margins if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } 

Rapide

 func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { // Remove seperator inset if cell.respondsToSelector(Selector("setSeparatorInset:")) { cell.separatorInset = UIEdgeInsetsZero } // Prevent the cell from inheriting the Table View's margin settings if cell.respondsToSelector(Selector("setPreservesSuperviewLayoutMargins:")) { cell.preservesSuperviewLayoutMargins = false } // Explictly set your cell's layout margins if cell.respondsToSelector(Selector("setLayoutMargins:")) { cell.layoutMargins = UIEdgeInsetsZero } } 

Un peu tard J’espère que c’est utile pour quelqu’un d’autre …

 if #available(iOS 9.0, *) { myTableView.cellLayoutMarginsFollowReadableWidth = false } 

readableContentGuide est un guide de mise en page déjà ajouté à chaque UIView

Cela permet de s’assurer que l’utilisateur n’a pas à tourner la tête pour lire le contenu.

Si vous souhaitez suivre le guide de contenu lisible, procédez comme suit:

 let baseSection = UIView() contentView.addSubview(baseSection) baseSection.translatesAutoresizingMaskIntoConstraints = false let insets = UIEdgeInsets(top: 4, left: 0, bottom: 4, right: 0) baseSection.leadingAnchor.constraint(equalTo: readableContentGuide.leadingAnchor, constant: insets.left).isActive = true baseSection.trailingAnchor.constraint(equalTo: readableContentGuide.trailingAnchor, constant: -insets.right).isActive = true baseSection.topAnchor.constraint(equalTo: contentView.topAnchor, constant: insets.top).isActive = true baseSection.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -insets.bottom).isActive = true 

Remarque: Dans le code au-dessus des ancres inférieures et supérieures, utilisez le contenu au lieu du readableContentGuide afin que les marges verticales du contenu changent en fonction de la tableView.rowHeight .