web-dev-qa-db-fra.com

Extension dynamique UITextView sur ios 7

J'utilise ce code

CGRect frame = self.mytext.frame;
frame.size.height = self.mytext.contentSize.height;
self.mytext.frame = frame;

Mais cela ne fonctionne pas sous iOS 7. Est-ce que quelqu'un sait pourquoi ou a le même problème?

Édité:

Désolé ... j'ai créé un UIView, un UITextView et un UIScrollView afin de pouvoir charger le texte dans mon extension uitextview.

J'ai utilisé ce code dans viewDidLoad

CGRect frame = self.moreDetailsTextView.frame;
frame.size.height = self.moreDetailsTextView.contentSize.height;
self.moreDetailsTextView.frame = frame;

CGRect moreViewFrame =  self.moreDetailsView.frame;
moreViewFrame.size.height = frame.size.height + 270;
self.moreDetailsView.frame = moreViewFrame;

int scrollViewHeight =  moreViewFrame.size.height + 235;
self.scrollView.contentSize = CGSizeMake(320, scrollViewHeight);

Cela fonctionnait très bien sous iOS 6, mais maintenant avec xcode5 et iOS 7, uitextview ne se développe pas lorsque je teste l'application dans le simulateur.

14
Osvaldo Cipriano

Remarqué dans IOS7 sizeToFit ne fonctionnait pas aussi - peut-être que la solution pourrait vous aider

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
22
Nick Wood

Finalement je l'ai fait.

Si quelqu'un a le même problème, je viens d'avoir ce code avant

    [_moreDetailsTextView sizeToFit];
9
Osvaldo Cipriano

Pour résoudre ce problème précis, j'ai créé une sous-classe UITextView légère, basée sur la mise en page automatique, qui grossit et diminue automatiquement en fonction de la taille de l'entrée utilisateur et peut être contrainte par une hauteur maximale et minimale, le tout sans aucune ligne de code.

Conçu principalement pour être utilisé dans le générateur Interface et fonctionne uniquement avec la mise en page automatique

https://github.com/MatejBalantic/MBAutoGrowingTextView

5
Matej Balantič
[UITextView sizeToFit];

Utiliser sizeToFit redimensionne la vue du texte mais coupe du texte du bas. aucune idée pour résoudre ça?

Solution:

Enfin, la méthode décrite dans le fil suivant a fonctionné. https://stackoverflow.com/a/18818036/1869452

2
Namit Gupta

Récemment, j'ai trouvé ce CSGrowingTextView qui mesure en cours de frappe, cela peut peut-être aider: https://github.com/cloverstudio/CSGrowingTextView

1
Josip B.

Aucune des réponses n'a fonctionné pour moi. UITextView que je veux éditer et que je souhaite agrandir de manière dynamique lorsque le texte se développe sur plusieurs lignes.

Cela fonctionnait bien pour iOS6, mais le problème avec le défilement de la vue du texte sur iOS7 me posait problème. 

La solution pour moi était de mettre l'encart inférieur pour l'affichage du texte sur iOS7. Comme ça:

_textView.contentInset = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? UIEdgeInsetsMake(0, 0, DEFAULT_FONT_SIZE, 0) : UIEdgeInsetsZero;

Des résultats satisfaisables. Bonne chance.

1
ancajic

GrowingTextViewHandler est une sous-classe NSObject qui redimensionne la vue de texte en tant que texte de type utilisateur. La gestion du redimensionnement via la sous-classe NSObject est plus utile que la sous-classe UITextView, car elle fonctionne pour toutes les sous-classes de UITextView. Voici l'utilisation de l'échantillon.

@interface ViewController ()<UITextViewDelegate>

 @property (weak, nonatomic) IBOutlet UITextView *textView;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
 @property (strong, nonatomic) GrowingTextViewHandler *handler;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.handler = [[GrowingTextViewHandler alloc]initWithTextView:self.textView withHeightConstraint:self.heightConstraint];
  [self.handler updateMinimumNumberOfLines:3 andMaximumNumberOfLine:8];
 }

- (void)textViewDidChange:(UITextView *)textView {
  [self.handler resizeTextViewWithAnimation:YES];
}
@end
0
hsusmita

Obtenir la nouvelle taille de textView en utilisant cette méthode

CGSize sz = [_textView.text sizeWithFont:_textView.font]

au cas où cela ne fonctionnerait pas très bien avec la hauteur, obtenez la largeur que vous venez de recevoir de la méthode preivous et utilisez-la dans la méthode suivante pour obtenir la hauteur appropriée dont vous avez besoin

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
    UITextView *textView = [[UITextView alloc] init];

    [textView performSelectorOnMainThread:@selector(setAttributedText:)
                                    withObject:text
                                 waitUntilDone:YES];

    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}

Remarque: s'il y avait une animation dans la vue, toutes les modifications apportées à view.frame seront ignorées car la vue sera redessinée à nouveau . Il serait donc préférable de traiter les contraintes que de traiter le cadre car les modifications que vous allez apporter à la contrainte seront permanentes, même si la vue a été rafraîchie.

créer IBoutlet d'une contrainte et le connecter à votre classe comme ça

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *your_constraint;

changer la valeur de la contraint, tout comme la façon dont vous modifiez les paramètres view.frame comme ça 

            _constraintHeaderTitle.constant = THE_NEW_VALUE;
0
Mohammad Allam

J'ai travaillé sur une solution complète pour résoudre ce problème sur iOS 9.3.1. Trouvez-le ici .

 enter image description here

0
Andres Canella