web-dev-qa-db-fra.com

Problème Xcode 7 iOS 9 UITableViewCell Separator Inset

Ce n'est pas une question, mais plutôt une solution au problème auquel j'ai été confronté.

Dans Xcode 7, lorsque l'application est exécutée sur iOS 9 sur des appareils iPad, les cellules UITableView laissent une marge sur le côté gauche de la vue de table. Et la rotation de l'appareil en mode paysage augmenterait les marges.

La solution que j'ai trouvée est:

La définition de "cellLayoutMarginsFollowReadableWidth" sur NO.

self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;

Depuis, cette propriété n'est disponible que dans iOS 9. Donc, vous devrez mettre une condition pour vérifier la version iOS, sinon elle plantera.

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

J'espère que cela sera utile aux autres.

68
stuti

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. Ainsi, dans l'iPhone et l'iPad portrait, les marges sont très petites, mais dans l'iPad paysage, elles sont plus grandes. Dans iOS 9, les marges de cellule d'UITableView suivent par défaut le guide de contenu lisible.

Si vous voulez arrêter cela, définissez simplement cellLayoutMarginsFollowReadableWidth de tableView sur NO/false.

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

39
Vizllx

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;
    }
}

Swift

 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];
    }
}

Swift

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
    }
  }
13
Bhuvan Bhatt

Un peu en retard. J'espère que c'est utile pour quelqu'un d'autre ...

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

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

Il s'agit 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érieure et supérieure, utilisez contentView au lieu de readableContentGuide afin que les marges verticales du contenu changent en fonction de tableView.rowHeight.

0
user1046037