2013-09-25 14 views
5

Z jakiegoś dziwnego powodu, mój tekst UITextView pojawia się przycięty po ustawieniu scrollofitu.UITextView, setContentOffset i brakująca dolna część

Oto jak to wygląda: enter image description here

Zdarza się to po zrobieniu:

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

Próbowałem ręcznego ustawiania contentSize.height, ale wprowadzono kolejną dziwne zachowanie, gdy zawartość wydaje się być przesunięte ignorowane ..

'' Edytuj '': Jest to kod używany do utworzenia instancji pola tekstowego:

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; 

I „update” kod, który sprawdza pozycjonowanie Zawartość składników każdą klatkę:

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

Jak można sobie wyobrazić, setContentOffset bit jest, co jest przyczyną problemu.

Co się dzieje?

+0

Czy próbowałeś "hacka" opisanego tutaj? http://stackoverflow.com/a/19137163/1153630 –

Odpowiedz

1

Wpadłem na bardzo podobny problem w iOS7 z UITextField - wygląda prawie dokładnie tak samo. Mój też miał do czynienia z insetami zawartości.

Rozwiązaniem (dla mnie) - było wyeliminowanie UITextField z nib/storyboard i utworzenie go i dodanie do widoku wyłącznie z kodu. Zachowanie zadziałało zgodnie z oczekiwaniami.

Nie wiem, co było innego, niż prawdopodobnie jest to bug iOS7/XCode 5 ... Ciekawy, czy to rozwiąże dla ciebie.

+0

Hmm, niestety mój UITextField został również utworzony z kodu:/ – kamziro

+0

Huh - Czy mógłbyś rzucić cały kod, którego używasz do utworzenia tego? Chciałbym spróbować i rozmnażać. Przysięgam, że kilka dni temu miałem ten sam problem; i pomyślałem, że naprawiłem to, wyciągając go ze stalówki ... może nie przypominam sobie tego, co zrobiłem. –

1

Moje thougts będzie, aby dostosować rozmiar UITextView na podstawie jego zawartości.

Jak zapytałem tutaj: how-do-i-size-a-uitextview-to-its-content

Kod wzięty z odpowiedzi jhibberd za

- (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, utwórz własną odpowiedź, a ja usunę kopalnię, stąd jest to twoje rozwiązanie, które przedstawiłem – CodeFanatic

+0

To moja aktualna sytuacja, ale chodzi o to, że chcę dynamicznie przewijać w dół, jeśli zawartość tekstu jest zbyt duża. Obecnie rozmiar pola tekstowego zmienia się tak duże, jak to konieczne, i jest to problem, ponieważ niektóre teksty są zbyt duże i zajmują cały ekran. A jeśli ustawię limit rozmiaru ramki, cóż ... to, co opisałem, dzieje się. – kamziro

3

spróbuj to z prev postu

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

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

+0

Wydaje się nie działać:/Korzystanie z powyższego kodu w obecnej postaci, drugi setContentOffset wydaje się, że nic nie robi (jest przewijany u góry), nawet gdy kursor tekstowy jest na dole.Zmiana animacji: TAK na animację: NIE anuluje pierwszy setContentOffset. – kamziro

Powiązane problemy