uitableviewcell textlabel trop long et pousser detailtextlabel hors de la vue
Quand je suis en utilisant UITableViewCellStyleValue1, j'ai eu une longue chaîne de textLabel, et en quelque sorte le detailTextLabel ai pousser hors de la vue.
Quand j'ai court-circuité mon textLabel texte, alors je peux voir la detailTextLabel du texte.
Est-il de toute façon à limiter la largeur de textLabel dans le style précédent, de sorte qu'il va tronquer le textLabel avec c'est trop long?
Mon code est:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.lineBreakMode = UILineBreakModeTailTruncation;
//---get the letter in each section; e.g., A, B, C, etc.---
NSString *alphabet = [self.currencyNameIndex objectAtIndex:[indexPath section]];
//---get all states beginning with the letter---
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
self.currencyList = [self.keyCurrencyName filteredArrayUsingPredicate:predicate];
if ([self.currencyList count] > 0)
{
NSString *currencyName = [self.keyCurrencyName objectAtIndex:indexPath.row];
cell.textLabel.text = currencyName;
NSString *currencyCode = [self.valueCurrencyCode objectAtIndex:indexPath.row];
cell.detailTextLabel.text = currencyCode;
}
return cell;
}
donc mon nom de la devise sera long sur certaines d'entrée.
- Il ressemble à la Figure 1-8 dans le la Vue de la Table Guide de Programmation pour iOS?
- oui. corriger Nick. sauf que mon detailTextLabel est fixé à 3 caractères, mais le textLabel sera long donc j'ai besoin de tronquer textLabel comme dans la Figure 1-8
- Étrange, il ne tronquée par défaut. Avez-vous mis la linebreakmode de la textLabel?
- collé le code. oui, essayé de définir le linebreakmode aussi, mais pas de chance
- Encore plus étrange. Pouvez-vous poster une capture d'écran? Et s'il vous plaît dump le cadre de la textLabel d'une cellule dans laquelle le texte ne pas regarder à droite.
Vous devez vous connecter pour publier un commentaire.
Utiliser le UILabel
lineBreakMode
propriété de restreindre votre texte à l'intérieur de la largeur de votreUILabel
L'utiliser comme ci-dessous.
Voici la liste des valeurs qui pourraient être utilisées avec
lineBreakMode
.http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html#//apple_ref/doc/c_ref/UILineBreakMode
ÉDITÉ:
De régler la largeur de votre
UILabel
selon votre conditionpar exemple.
cell.textLabel.frame.size.width = 320;
, vous obtiendrez une erreur de compilation, indiquant que "l'Expression n'est pas cessible' -- donc, je ne crois pas que cela fonctionne pour le scénario décrit.textLabel
utilise déjàNSLineBreakByTruncatingTail
par défaut. Et il n'y a aucun moyen de changer largeur de l'étiquette sans sous-classementUITableViewCell
.Plus simple pour moi était à la sous-classe UITableViewCell et remplacer le layoutSubviews.
Ne pouvais pas trouver un moyen fiable pour calculer les positions de juste l'étiquette frames donc juste codé en dur l'accessoire largeur dans ce cas, un UITableViewCellStyleValue1 cellule avec un UITableViewCellAccessoryDisclosureindicator type d'accessoire.
const CGFloat accessoryWidth = CGRectGetWidth(self.bounds) - CGRectGetMaxX(detailTextLabelFrame)
@Jhaliya @lucas
voir ici: Personnalisé UITableViewCell. Impossible d'appliquer les UILineBreakModeTailTruncation
UILineBreakModeTailTruncation
parNSLineBreakByTruncatingTail
(obsolète depuis iOS6).J'ai eu le même problème et a dû créer un UITableViewCell sous-classe. Il est plus facile de le faire que ce que je pensais:
Fondamentalement, suffit de faire un nouveau fichier, qui est une sous-classe de UITableViewCell
Ajouter les étiquettes et de les synthétiser:
Dans le StoryBoard, l'ensemble de votre classe dans les cellules de la classe, faire le Style "Custom" et à ajouter les deux étiquettes dans la cellule de regarder exactement comme vous le souhaitez (j'en ai fait le même aspect que le défaut: http://cl.ly/J7z3)
La partie la plus importante est de faire en sorte de vous connecter les étiquettes à la cellule
Vous avez besoin de contrôle-clic à partir de la Cellule à l'étiquette dans la structure du Document. Voici une photo de ce à quoi il ressemble: http://cl.ly/J7BP
Ce qui m'a aidé à comprendre comment créer de cellule personnalisé, dynamique des cellules, et les cellules statiques est cette vidéo sur youtube: http://www.youtube.com/watch?v=fnzkcV_XUw8
Une fois que vous faites cela, vous devriez être tous ensemble. Bonne chance!
J'ai rencontré un problème similaire lors de l'utilisation de "Détail" en UITableView; le droit de détails intégré dans l'étiquette du titre a casser mon sous-titre de l'étiquette.
Finalement, j'ai abandonné sur le "Détail" en faveur de mon propre personnalisée (utilisation de swift et de mise en page automatique):
J'ai créé ma propre classe simple qui a hérité de la UITableViewCell:
J'ai mis mon prototype de l'utilisation des cellules qui classe personnalisée par le "Style" champ "à" Custom " sur le Tableau "Vue de Cellules" dans le Menu et en ajoutant "TransactionCell" à la "Classe" de la "Classe Personnalisée" dans le menu. Ces menus sont disponibles lorsque vous sélectionnez le prototype de cellule dans la table de montage séquentiel.
J'ai ajouté deux étiquettes à mon prototype de cellule et connecté à ma classe personnalisée par un click droit faisant glisser à partir de mes étiquettes à ma classe (Bizarrement, j'ai dû nettoyer mon build avant de me laisser faire ce):
J'ai ajouté de nouvelles contraintes pour mes étiquettes, profitant de swift fonctionnalités de mise en page automatique (Vous aurez besoin de mettre ces pour répondre à vos propres exigences; voir un tutoriel sur la mise en page automatique si vous êtes coincé)
Il a travaillé pour moi, ce qui me permet d'avoir la flexibilité de différentes quantités de plusieurs lignes dans un UITableView dans swift par cellule, tandis que le formatage de la parole d'emballage, de sorte qu'il avait l'air gentil et même, comme je pensais que le "Détail" de le faire automatiquement.
Ajuster le cadre de la vue: textLabel
Mis à jour Gosoftworks Développement de la réponse.
Swift 3
Créer un personnalisé UITableViewCell avec un UILabel que vous pouvez contrôler ce que vous voulez, ou tronquer le texte que vous attribuez à la classe de base textLabel pour s'adapter à l'espace dont vous disposez.
Il n'est pas parfait, mais j'ai utilisé le texte de la troncature de la technique dans des endroits où une cellule personnalisé est overkill (ex. lorsque la seule question était de côté le texte) à l'aide d'un NSString catégorie avec une méthode similaire à la suivante:
Probablement pas "optimisé", mais il fonctionne pour les scénarios simples.
1er: jeu de saut de ligne en mode
2e: ensemble texLabel largeur d'image que vous souhaitez (par exemple, 200)
Ça marche!!!! Mais j'ai juste changé de Christopher King code:
et utilisation:
J'ai lutté avec cette un tas et a trouvé une jolie réponse simple. Mon
textLabel
était sur la gauche et pousser lesdetailText
sur la droite, au point que tu ne pouvais pas la voir du tout parfois.Ma solution, changer le
Table View Cell
style
àSubtitle
deLeft Detail
ouRight Detail
. Cette solution fonctionne si vous n'avez pas l'esprit de votredetailText
ci-dessous au lieu de sur la droite ou la gauche.Si vous rencontrez des problèmes avec la hauteur de la ligne, vous pouvez régler cela à l'aide du code ci-dessous dans
viewDidLoad
.Swift version supportant les derniers iOS (12):