2013-09-25 11 views
5

Per qualche strano motivo, il testo del mio UITextView appare ritagliato quando è impostato lo scrollofset.UITextView, setContentOffset e parte inferiore mancante

Ecco come si presenta: enter image description here

Questo accade dopo aver fatto:

 textview.contentInset = UIEdgeInsetsZero; 
     [textview setContentOffset:CGPointMake(0, startypos + offset_yshift) animated:NO]; 

ho provato ad installare manualmente contentSize.height, ma che ha introdotto un altro strano comportamento, in cui il contenuto di offset sembra essere ignorato ..

'' Modifica '': Questo è il codice utilizzato per creare un'istanza del campo di testo:

CGRect myImageRect = CGRectMake(-50.0f, -50.0f, 40.0f, 40.0f); 
    textview = [[UITextView alloc] initWithFrame: myImageRect]; 
    textview.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    [textview setScrollEnabled:YES]; 
    textview.hidden = YES; 
    textview.contentInset = UIEdgeInsetsZero; 
    textview.opaque = NO; 
    textview.backgroundColor = [UIColor clearColor]; 
    textview.textColor = [UIColor colorWithWhite:1 alpha:1]; 
    textview.textAlignment = NSTextAlignmentCenter; 
    textview.frame = CGRectMake(0, 0, 250, 30); 
    textview.scrollEnabled = NO; 

E il codice "update" che controlla il posizionamento contenuti ogni fotogramma:

// setting the actual size here 
    UITextPosition * pos = [textview positionFromPosition: textview.endOfDocument offset:nil]; 
    CGRect therect = [textview caretRectForPosition:pos]; 

    CGRect frame = textview.frame; 

    if([textview.text length] == 0){ 
    frame.size.height = 30; 
    } else { 
    frame.size.height = therect.origin.y + therect.size.height; 
    } 

    // and here, we're changing the frame variable's height to max to 50 
    if(frame.size.height > 50){ 
    frame.size.height = 50; 
    } 
    frame.size.width = desiredwidth; // some other variable 

    textview.frame = frame; 

    /* 

    ... snip, unrelated code ... 

    */ 

    // later on 

     textview.contentInset = UIEdgeInsetsZero; 
     [textview setContentOffset:CGPointMake(0, startypos + offset_yshift) animated:NO]; 

Come si può immaginare, il setContentOffset po 'là è ciò che è la causa del problema.

Cosa sta succedendo?

+0

Hai provato il "trucco" descritto qui? http://stackoverflow.com/a/19137163/1153630 –

risposta

1

Mi sono imbattuto in un problema molto simile in iOS7 con UITextField - sembra quasi esattamente lo stesso. Il mio aveva a che fare anche con insiemi di contenuti.

La soluzione (per me) - consisteva nell'eliminare UITextField da pennino/storyboard e istanziarlo e aggiungerlo alla vista puramente dal codice. Il comportamento ha funzionato come previsto in seguito.

Non so cosa fosse diverso da quello che probabilmente è un bug di iOS7/XCode 5 ... Curioso di sapere se lo risolve anche per te.

+0

Hmm, sfortunatamente il mio UITextField è stato istanziato anche dal codice:/ – kamziro

+0

Huh - Ti dispiacerebbe lanciare tutto il codice che usi per istanziarlo? Mi piacerebbe provare e riprodurre. Giuro che ho avuto lo stesso problema un paio di giorni fa; e ho pensato di averlo risolto togliendolo dal pennino ... forse non sto ricordando quello che ho fatto. –

1

I miei pensieri sarebbero, per regolare le dimensioni di UITextView in base al suo contenuto.

Come chiesto qui: how-do-i-size-a-uitextview-to-its-content

codice preso dalla risposta di jhibberd

- (void)textViewDidChange::(UITextView *)textView 
    { 
     CGFloat fixedWidth = textView.frame.size.width; 
     CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
     CGRect newFrame = textView.frame; 
     newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
     textView.frame = newFrame; 
    } 
+0

@jhibberd, crea la tua risposta e rimuoverò la mia, quindi è la tua soluzione che ho presentato – CodeFanatic

+0

Questa è la mia situazione attuale, ma il fatto è che voglio scorrere dinamicamente verso il basso se il contenuto della visualizzazione testo è troppo grande. Attualmente la casella di testo si ridimensiona appena quanto è necessario, ed è un problema perché alcuni testi sono troppo grandi e occupano tutto lo schermo. E se metto un limite alle dimensioni del fotogramma, beh ... la cosa che ho descritto succede. – kamziro

3

riprova questo post da post prev

CGPoint offset = CGPointMake(0, self.textView.contentSize.height - self.textView.frame.size.height); 
[self.textView setContentOffset: CGPointMake(0,0) animated:NO]; 
or 
[self.textView setContentOffset:bottomOffset animated:YES]; 

[messaggio]: UITextView contentOffset on iOS 7 "post prev" \

+0

Non sembra funzionare:/Usando il codice precedente così com'è, il secondo setContentOffset sembra che non faccia nulla (è ancora scostato in alto), anche se il cursore del testo è completamente in basso.Modifica animata: SÌ ad animato: NO annulla il primo setContentOffset. – kamziro

Problemi correlati