Taille de contenu UITextView différente dans iOS7

J'utilise un UITextView qui sera extensible en enregistrant un button "more". Le problème est le suivant:

Sur iOS6 je l'utilise,

 self.DescriptionTextView.text = @"loong ssortingng"; if(self.DescriptionTextView.contentSize.height>self.DescriptionTextView.frame.size.height) { //set up the more button } 

Le problème est que sur iOS7 le contentSize.height renvoie une valeur différente (beaucoup plus petite) que la valeur qu'il renvoie sur iOS6. Pourquoi est-ce? Comment le réparer?

La propriété de taille de contenu ne fonctionne plus comme sur iOS 6. L'utilisation de sizeToFit, comme d'autres personnes le suggèrent, peut ne pas fonctionner selon certains facteurs.

Cela n'a pas fonctionné pour moi, donc j'utilise ceci à la place:

 - (CGFloat)measureHeightOfUITextView:(UITextView *)textView { if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { // This is the code for iOS 7. contentSize no longer returns the correct value, so // we have to calculate it. // // This is partly borrowed from HPGrowingTextView, but I've replaced the // magic fudge factors with the calculated values (having worked out where // they came from) CGRect frame = textView.bounds; // Take account of the padding added around the text. UIEdgeInsets textContainerInsets = textView.textContainerInset; UIEdgeInsets contentInsets = textView.contentInset; CGFloat leftRightPadding = textContainerInsets.left + textContainerInsets.right + textView.textContainer.lineFragmentPadding * 2 + contentInsets.left + contentInsets.right; CGFloat topBottomPadding = textContainerInsets.top + textContainerInsets.bottom + contentInsets.top + contentInsets.bottom; frame.size.width -= leftRightPadding; frame.size.height -= topBottomPadding; NSSsortingng *textToMeasure = textView.text; if ([textToMeasure hasSuffix:@"\n"]) { textToMeasure = [NSSsortingng ssortingngWithFormat:@"%@-", textView.text]; } // NSSsortingng class method: boundingRectWithSize:options:atsortingbutes:context is // available only on ios7.0 sdk. NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineBreakMode:NSLineBreakByWordWrapping]; NSDictionary *atsortingbutes = @{ NSFontAtsortingbuteName: textView.font, NSParagraphStyleAtsortingbuteName : paragraphStyle }; CGRect size = [textToMeasure boundingRectWithSize:CGSizeMake(CGRectGetWidth(frame), MAXFLOAT) options:NSSsortingngDrawingUsesLineFragmentOrigin atsortingbutes:atsortingbutes context:nil]; CGFloat measuredHeight = ceilf(CGRectGetHeight(size) + topBottomPadding); return measuredHeight; } else { return textView.contentSize.height; } } 

Essayez la réponse dans le lien suivant, layoutIfNeeded doit être appelé avant contentSize .

iOS7 UITextView contentsize.height alternative

La réponse:

Dans iOS7, UITextView utilise NSLayoutManager pour NSLayoutManager en forme le text:

 // If YES, then the layout manager may perform glyph generation and layout for a given portion of the text, without having glyphs or layout for preceding portions. The default is NO. Turning this setting on will significantly alter which portions of the text will have glyph generation or layout performed when a given generation-causing method is invoked. It also gives significant performance benefits, especially for large documents. @property(NS_NONATOMIC_IOSONLY) BOOL allowsNonContiguousLayout; 

disable allowsNonContiguousLayout à allowsNonContiguousLayout de réparer contentSize :

 textView.layoutManager.allowsNonContiguousLayout = NO; 

Ce lien semble avoir la réponse.

Vous devez utiliser sizeToFit avant d'utiliser contentSize .

Essayez avec le code suivant, Son sera travailler à la fois iOS6 et 7, s'il vous plaît essayez-le.

 CGSize myTextViewSize = [self.myTextView sizeThatFits:CGSizeMake(self.myTextView.frame.size.width, FLT_MAX)]; self.myTextView.height = myTextViewSize.height; NSLog(@"%f", self.myTextView.height);