L'impostazione di contentInset
può aiutare il testo ad apparire più correttamente all'interno dello UITextView
. Tuttavia, non risolverà il problema per cui lo UITextView
ha lo scorrimento abilitato pur non avendo più testo da visualizzare.
Analogamente, i metodi come sizeWithFont
presentano limitazioni. Come spiegato nell'eccellente serie di blog di Mike Weller iOS Development: You're Doing It Wrong, NSString
non è un buon oggetto da chiedere per quanto riguarda l'ampiezza di un UIView
. Molte sottoclassi UIView
come UILabel
, UIButton
, ecc. Hanno inset e altre considerazioni che devono essere tenute in considerazione durante il dimensionamento. UITextLabel
non fa eccezione.
particolare voce di Mike Weller su questo argomento è:
You're Doing It Wrong #2: Sizing labels with -[NSString sizeWithFont:...]
iOS 7 ci promette più sofisticata gestione del testo in UITextView
, con proprietà come textContainerInset
. Ma cosa fare nel frattempo?
Bene, per prima cosa sappiamo che UITextView
è una sottoclasse di UIScrollView
.Pertanto, la regola d'oro che se la contentSize
è più grande della proprietà della vista bounds
, la vista di scorrimento scorrerà in modo da poter vedere più contenuti.
Verificando contentSize
agains il bounds
non funziona o perché sappiamo che UIScrollView
sta già calcolando se deve scorrere o meno in base al testo, e ci sta dando la risposta sbagliata.
Qui è dove i valori di regolazione arbitrari vengono in soccorso! Per me questo valore era 17.f
. Per te - a seconda dei tuoi caratteri - potrebbe essere diverso. Prendiamo quindi il controllo e decidiamo se consentire lo scorrimento della vista per scorrere:
static const CGFloat kArbritaryHeight = 17.f;
CGFloat adjustedContentHeight = myTextView.contentSize.height - kArbritaryHeight;
CGFloat boundsHeight = CGRectGetHeight(myTextView.bounds);
BOOL tooMuchContent = adjustedContentHeight > boundsHeight;
if (tooMuchContent)
{
myTextView.scrollEnabled = YES;
}
else
{
myTextView.scrollEnabled = NO;
}
fonte
2013-10-15 14:12:01