J'ai une application dans laquelle le séparateur de l'UITableView
'est défini sur des valeurs personnalisées - droite 0
, gauche 0
. Cela fonctionne parfaitement sous iOS 7.x
, mais sous iOS 8.0
, je constate que le séparateur est réglé sur la valeur par défaut de 15
à droite. Même si dans les fichiers xib il est réglé sur "0", il s'affiche toujours de manière incorrecte.
Comment puis-je supprimer les marges de séparation de UITableViewCell
?
Arg ! !! Après avoir joué autour soit faire ceci dans votre sous-classe Cell
:
- (UIEdgeInsets)layoutMargins
{
return UIEdgeInsetsZero;
}
soit en définissant le paramètre cell.layoutMargins = UIEdgeInsetsZero;
, cela a été réglé pour moi.
Je crois que c'est la même question que j'ai posée ici : https://stackoverflow.com/questions/25762723/remove-separatorinset-on-ios-8-uitableview-for-xcode-6-iphone-simulator.
Dans iOS 8, il y a une nouvelle propriété pour tous les objets qui héritent de UIView
. Donc, la solution pour définir le SeparatorInset
dans iOS 7.x ne pourra pas supprimer l'espace blanc que vous voyez sur le UITableView dans iOS 8.
La nouvelle propriété s'appelle "layoutMargins".
@property(nonatomic) UIEdgeInsets layoutMargins
Description The default spacing to use when laying out content in the view.
Availability iOS (8.0 and later)
Declared In UIView.h
Reference UIView Class Reference
![iOS 8 UITableView setSeparatorInset:UIEdgeInsetsZero setLayoutMargins:UIEdgeInsetsZero][1]
La solution:-
-(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];
}
}
Si vous définissez cell.layoutMargins = UIEdgeInsetsZero;
sans vérifier si le layoutMargins
existe, l'application plantera sous iOS 7.x. Donc, la meilleure solution serait de vérifier si le layoutMargins
existe d'abord avant setLayoutMargins:UIEdgeInsetsZero
.
En Swift, c'est un peu plus ennuyeux parce que layoutMargins
est une propriété, donc vous devez surcharger le getter et le setter.
override var layoutMargins: UIEdgeInsets {
get { return UIEdgeInsetsZero }
set(newVal) {}
}
Cela rendra effectivement layoutMargins
en lecture seule, ce qui dans mon cas est bien.