2013-09-25 10 views
5

Aus irgendeinem seltsamen Grund wird der Text meines UITextView abgeschnitten, wenn der Scrollofset festgelegt ist.UITextView, setContentOffset und fehlender unterer Teil

Hier ist, wie es aussieht: enter image description here

Dies geschieht, nachdem tun:

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

Ich versuchte contentSize.height manuell einstellen, aber das führte ein anderes seltsames Verhalten, wo der Offset Inhalt zu sein scheint ignoriert ..

'' Bearbeiten '': Dies ist der Code verwendet, um das Textfeld zu instanziiert:

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; 

Und die „update“ Code, der den Inhalt Positionierung jeden Frame überprüft:

// 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]; 

Wie Sie sich vorstellen können, biss die setContentOffset gibt es, was das Problem verursacht.

Was ist los?

+0

Haben Sie den hier beschriebenen "Hack" ausprobiert? http://StackOverflow.com/a/19137163/1153630 –

Antwort

1

Ich stieß auf ein sehr ähnliches Problem in iOS7 mit UITextField - sieht fast genau gleich aus. Meins hat auch mit Inhaltseinfügungen zu tun.

Die Lösung (für mich) - war die UITextField von Nib/Storyboard zu beseitigen und instanziieren und fügen Sie es in die Ansicht rein aus Code. Das Verhalten hat danach wie erwartet funktioniert.

Ich weiß nicht, was war anders als es wahrscheinlich ein iOS7/XCode 5 Bug ... Neugierig zu wissen, ob das auch für Sie löst.

+0

Hmm, leider wurde mein UITextField auch vom Code instanziiert:/ – kamziro

+0

Huh - Hätten Sie etwas dagegen, den ganzen Code zu werfen, den Sie verwenden, um es zu instanziieren? Würde gerne versuchen und reproduzieren. Ich schwöre, ich hatte vor ein paar Tagen dasselbe Problem; und dachte, ich repariere es, indem ich es aus der Feder nehme ... vielleicht erinnere ich mich nicht, was ich getan habe. –

1

Mein Ziel wäre es, die Größe des UITextView basierend auf seinem Inhalt anzupassen.

Wie hier gefragt: how-do-i-size-a-uitextview-to-its-content

-Code aus jhibberd Antwort genommen

- (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, erstellen Sie Ihre eigene Antwort und ich werde meine entfernen, daher ist es Ihre Lösung, die ich vorgestellt – CodeFanatic

+0

Das ist meine aktuelle Situation, aber die Sache ist, ich möchte dynamisch nach unten scrollen, wenn der Inhalt der Textansicht zu groß ist. Zur Zeit wird die Größe des Textfeldes nur so groß wie nötig, und es ist ein Problem, weil ein Text viel zu groß ist und den ganzen Bildschirm einnimmt. Und wenn ich die Rahmengröße limitieren möchte, dann .. das, was ich beschrieben habe, passiert. – kamziro

3

bitte versuchen Sie dies aus i.Vj. Post

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]; 

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

+0

Scheint nicht zu funktionieren:/Mit dem obigen Code, so wie es ist, scheint der zweite setContentOffset, wie es nichts tut (es ist immer noch an der Spitze gescrollt), auch wenn der Text-Cursor ganz unten ist.Animation ändern: YES zu animiert: NEIN hebt den ersten setContentOffset auf. – kamziro