iOS 7.1 UitableviewCell contenu de chevauchement avec ceux ci-dessous
J'ai donc code, qui est relevé de travail sur iOS 7.0, mais pas en 7.1. J'ai une simple tableview, avec le code:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 70.0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
UILabel *label = [[UILabel alloc] init];
label.text = [NSString string];
for (NSInteger i = 0; i < 20; i++) {
label.text = [label.text stringByAppendingString:@"label String "];
}
label.translatesAutoresizingMaskIntoConstraints = NO;
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWorldWrapping;
//label.lineBreakMode = NSLineBreakByTruncatingTail; //I have tried this too
[cell.contentView addSubview:label];
NSDictionary *dict = NSDictionaryOfVariableBindings(label);
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[label]-8-|" options:0 metrics:nil views:dict]];
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[label]" options:0 metrics:nil views:dict]];
if (indexPath.row == 0) {
label.textColor = [UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0];
}
else if (indexPath.row == 1) {
label.textColor = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:1.0];
}
else if (indexPath.row == 2) {
label.textColor = [UIColor colorWithRed:0 green:0 blue:1.0 alpha:1.0];
}
else {
label.textColor = [UIColor colorWithWhite:0.3 alpha:1.0];
}
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:1.0];
return cell;
}
J'ai 1l'article avec 10rows. Avec chaque ligne réutilisés j'ai supprimer tous les sous-vues de contentView(j'ai essayé alloc-init UITableViewCell, mais il est venu avec les mêmes résultats).
Sur iOS 7.0, UILabel s'affiche uniquement dans la cellule à laquelle il appartient. Mais en 7.1 UILabel continue de l'affichage sur un autre cellules. Ce qui est interressant, que quand je clique sur la cellule, il cesse d'être la superposition par d'autres, mais seulement jusqu'à ce que je clique sur la cellule ci-dessus.
Ma question est, comment faire pour le faire fonctionner sur 7.1 appareils comme sur la version 7.0 ceux.
J'ai essayé les deux simulateur et l'appareil, j'ai pris un coup d'oeil à iOS 7.1 API Diffs, mais rien trouvé lié à ce.
Peut-être qu'il est question de la Mise en page Automatique, que j'ai de la hauteur variable de UILabel, mais j'ai besoin de le faire. Je veux avoir tout le texte dans UILabel, mais n'afficher qu'une partie de UILabel, qui peut être affiché dans une cellule, qui est le comportement par défaut dans la version 7.0, 7.1 mais les changements de cela et je ne sais pas pourquoi pourquoi et comment traiter avec elle.
C'est dossier dropbox pour les images avec une explication détaillée: Dossier avec des images
Mise à jour: j'ai essayé des choses comme tese, mais rien n'a fonctionné pour moi.
cell.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.contentView.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.opaque = NO;
cell.contentView.opaque = NO;
cell.clearsContextBeforeDrawing = NO;
cell.contentView.clearsContextBeforeDrawing = NO;
cell.clipsToBounds = NO;
cell.contentView.clipsToBounds = NO;
Vous devez vous connecter pour publier un commentaire.
La question a à voir avec la hauteur de votre cellule. Il n'est pas à ajuster de façon dynamique pour vous.
Vous aurez probablement remarqué que lorsque vous faites défiler et de la vue ci-dessus va afficher le texte superposé disparaîtra avec elle.
Si vous êtes désireux de votre texte à clip à une certaine hauteur, alors vous avez besoin pour définir le nombre de lignes, plutôt que de fixer à 0 depuis qui le laisse continuer pour toujours.
La
lineBreakMode
ne prendra pas effet car il n'est pas arrêté.Éventuellement vous pourriez essayer de mettre de l'écrêtage sur le contentView pour s'assurer que tous les sous-vues rester à l'intérieur.
En fonction du résultat final que vous voulez, vous pouvez faire dynamique hauteurs et change en fonction du contenu. Il y a un tas de questions liées à cela.
Mise à jour de coupures de la contentView
Que j'aurais du l'essayer moi-même, mais au lieu de cela, voici quelques liens relatifs à l'enlèvement de la contentView:
Ressemble à ceci fonctionne:
Ici est la solution Parfaite de Cumul de contenu dans les Cellules.
Suffit d'utiliser code ci-dessous dans cellForRowAtIndexPath après l'attribution de la cellule et avant d'ajouter des sous-vues.
Fait le chevauchement se produit parce que chaque fois que vous faites défiler la tableview son affectation ajouté vue encore et encore. Donc le code ci-dessus permettra de résoudre votre problème en supprimant les points de vue à partir de la cellule contentView.
Maintenant, Vous pouvez voir le mémoire de la session de débogage après l'application de code ci-dessus, votre mémoire est stable en ce moment.
Espère que ça va vous aider.
Merci !
Ce problème est de recréer le contenu de la cellule. Essayez avec le segment de code suivant.
@Gaurav votre réponse devrait être la accepté de répondre. Merci!
avait un comportement similaire dans iOS 8, en utilisant la table de montage séquentiel /IB.
correctif a été d'ajouter un
Bottom Space to: Superview
contrainte de la tout en bas, vue d'en bas du prototype de la cellule d'Affichage de Contenu. Les autres points de vue et contraintes ont été fixés par le haut.Êtes-vous à l'aide des story-boards?
Si oui, sélectionnez la table view controller dans les storyboards et décochez la case "par le bas" barres de
Vous pouvez également le faire par programmation.
Si votre TVC hérite d'une nav-vue-contrôleur ou un onglet view controller, vous pouvez avoir besoin de décocher cette option de présentation sur la vue parent au lieu