Comment puis-je obtenir la deuxième cellule pour se développer pour s'adapter au texte plutôt que d'augmenter le texte? Y a-t-il une façon de faire cela dans IOS ou devrai-je proposer une solution cuisinée à la maison? Si vous regardez dans l'application IOS Contacts, il existe une boîte comme celle-ci pour l'adresse. Je ne trouve pas comment implémenter cela.
P>
pour que quiconque cherche à y parvenir à l'avenir, Voici le code de ma solution: P>
Fichier d'en-tête: P>
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0 && indexPath.row == 1) { NSString *text = [atmAnnotation address]; CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; NSLog(@"Size for address is Height:%f Width:%f",size.height,size.width); CGFloat height = MAX(size.height, 44.0f); return height + (CELL_CONTENT_MARGIN * 2); } return 44.0f; }
4 Réponses :
Mise en œuvre: dans votre délégué de table. Pour la ligne et la section différente de l'index passe, renvoyez une hauteur différente pour s'adapter à votre étiquette. P> Assurez-vous "Ajuster à l'ajustement" pour que l'étiquette IB n'est pas cochée (propriété ajustfontSizeofitofitwidth code > Si c'est terminé à l'aide du code). p> p>
Où vous avez l'adresse en tant que détailTextLabel, utilisez un Uilabel qui prend en charge autant de lignes que nécessaire, pour une adresse, 3 devraient suffire. Avec Paul Brent's < / code>
réponse, vous devriez être prêt à partir. p>
Malheureusement, vous allez devoir mettre en œuvre cette fonctionnalité vous-même. Il existe une variété de méthodes et de rappel que vous devez utiliser pour calculer la hauteur des rangées et des étiquettes. Si vous avez besoin d'aide pour commencer, je peux modifier cette réponse pour inclure un exemple de code. Sinon, je suis sûr qu'il y a des questions connexes ici sur SO ou Google qui peuvent vous aider à démarrer. En résumé, cependant: p>
Numberflines code> sur 0, l'étiquette utilisera autant de lignes que nécessaire. LI>
- Dans votre
UitailViewAsource Code> Implémentation de -TableView: Cellfrowrowindexpath: code>, vous devez utiliser la même logique qu'avant pour déterminer le cadre de vos étiquettes. Définissez le texte que vous souhaitez, puis modifiez le cadre de sorte que l'étiquette soit suffisamment grande pour simplement adapter tout le texte. Li>
ul>
Je viens de courir dans ce même problème. J'ai trouvé une solution alternative qui ne nécessite pas tout autant de codage dur et vous permet de modifier l'étiquette dans le constructeur d'interface qui sera reflété dans le calcul de la hauteur.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0 && indexPath.row == 1) { NSString *text = [atmAnnotation address]; UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; cell.textLabel.text = text; [cell.textLabel sizeToFit]; CGFloat height = MAX( 44, cell.textLabel.bounds.size.height ); return height + CELL_CONTENT_MARGIN * 2; } return 44.0f; }