C'è un modo per ridurre la dimensione del carattere in un UITextView se c'è troppo testo? Simile a UILabel?Ridimensiona la dimensione del carattere in UITextView
risposta
Prova questa:
NSInteger lengthThreshold = 200;
if([ textView.text length ] > lengthThreshold) {
NSInteger newSize = ... //calculate new size based on length
[ textView setFont: [ UIFont systemFontOfSize: newSize ]];
}
Il problema con la risposta accettata è che si deve indovinare il numero di caratteri (la lunghezza della stringa) necessari per riempire il campo, e che si differenzia dal tipo di carattere per carattere. Qualcosa del genere, una categoria su UITextView, dovrebbe funzionare.
#import "UITextView+Size.h"
#define kMaxFieldHeight 1000
@implementation UITextView (Size)
-(BOOL)sizeFontToFitMinSize:(float)aMinFontSize maxSize:(float)aMaxFontSize {
float fudgeFactor = 16.0;
float fontSize = aMaxFontSize;
self.font = [self.font fontWithSize:fontSize];
CGSize tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
CGSize stringSize = [self.text sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
while (stringSize.height >= self.frame.size.height) {
if (fontSize <= aMinFontSize) // it just won't fit, ever
return NO;
fontSize -= 1.0;
self.font = [self.font fontWithSize:fontSize];
tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
stringSize = [self.text sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
}
return YES;
}
@end
Implementazione di Swift 4 ispirata alla risposta di @Jane Sales.
Per il calcolo della larghezza e dell'altezza disponibili, è necessario prendere in considerazione anche i possibili margini verticali e orizzontali (textContainerInset
e textContainer.lineFragmentPadding
).
Ecco una spiegazione migliore di come il lavoro margini sui UITextView
: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/TextUILayer/Tasks/SetTextMargins.html
Se la vista testo può ridimensionare, allora dobbiamo anche forzare un layout in modo che possiamo calcolare la dimensione del carattere in base a più grande dimensione possibile vista del testo. In questo caso viene considerata solo l'altezza (layout solo se l'altezza del testo richiesta è maggiore dell'altezza disponibile originale).
import UIKit
extension UITextView {
func adjustFontToFitText(minimumScale: CGFloat) {
guard let font = font else {
return
}
let scale = max(0.0, min(1.0, minimumScale))
let minimumFontSize = font.pointSize * scale
adjustFontToFitText(minimumFontSize: minimumFontSize)
}
func adjustFontToFitText(minimumFontSize: CGFloat) {
guard let font = font, minimumFontSize > 0.0 else {
return
}
let minimumSize = floor(minimumFontSize)
var fontSize = font.pointSize
let availableWidth = bounds.width - (textContainerInset.left + textContainerInset.right) - (2 * textContainer.lineFragmentPadding)
var availableHeight = bounds.height - (textContainerInset.top + textContainerInset.bottom)
let boundingSize = CGSize(width: availableWidth, height: CGFloat.greatestFiniteMagnitude)
var height = text.boundingRect(with: boundingSize, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil).height
if height > availableHeight {
// If text view can vertically resize than we want to get the maximum possible height
sizeToFit()
layoutIfNeeded()
availableHeight = bounds.height - (textContainerInset.top + textContainerInset.bottom)
}
while height >= availableHeight {
guard fontSize > minimumSize else {
break
}
fontSize -= 1.0
let newFont = font.withSize(fontSize)
height = text.boundingRect(with: boundingSize, options: .usesLineFragmentOrigin, attributes: [.font: newFont], context: nil).height
}
self.font = font.withSize(fontSize)
}
}
- 1. Come posso impostare la dimensione del carattere di UITextView?
- 2. Swift Aumenta la dimensione del carattere di UITextview, come?
- 3. Aumentare la dimensione del carattere dei caratteri emoji in un UITextView in iOS 5.x
- 4. Ridimensiona testo su misura su UITextView
- 5. Controllare la dimensione del carattere nella grafica in LaTeX quando si ridimensiona in minipage/subfig?
- 6. dimensione della matrice e la dimensione del puntatore carattere carattere
- 7. imposta la dimensione del carattere in jquery
- 8. rileva la dimensione del carattere del browser
- 9. Unità predefinita per la dimensione del carattere?
- 10. Leggi la dimensione del carattere da Impostazioni
- 11. JTextPane: Come impostare la dimensione del carattere
- 12. Lighttable, impostare la dimensione del carattere
- 13. CATextLayer ignora la dimensione del carattere
- 14. Come impostare la dimensione del carattere del testo in Unity?
- 15. Attenzione: "Min Dimensione carattere maggiore dimensione del carattere corrente"
- 16. ImageMagick Ridimensiona PNG Aumenta la dimensione del file
- 17. La dimensione del carattere * è uguale alla dimensione di int *?
- 18. Ridimensiona una dimensione del font SKLabelNode per adattarla?
- 19. Android dimensione del carattere pulsante
- 20. dimensione del carattere WebView Android in pixel
- 21. Modifica solo la dimensione del carattere in SWT
- 22. Aumentare la dimensione del carattere in un JButton
- 23. Regola automaticamente la dimensione del carattere in heatmap seaborn
- 24. Come ridurre la dimensione del carattere in NumberPicker
- 25. App Android: come leggere la dimensione del carattere in Impostazioni?
- 26. Come cambiare la dimensione del carattere in html?
- 27. come impostare la dimensione del carattere della chiave in gnuplot?
- 28. come impostare la dimensione del carattere LaTeX in millimetri?
- 29. In che modo la dimensione del carattere non funziona qui?
- 30. Come posso aumentare la dimensione del carattere in WebStorm?
Mi piace molto questo approccio. Se qualcuno ha problemi ad usarlo, ecco cosa faccio: 'if (! [MainContent sizeFontToFitMinSize: 12.0 maxSize: 20.0]) {NSLog (@" il contenuto non si adatta! "); } ' – dchakarov