2013-09-25 7 views
5

По какой-то странной причине текст UITextView появляется обрезанным, когда установлен scrollofset.UITextView, setContentOffset и отсутствующая нижняя часть

Вот как это выглядит: enter image description here

Это происходит после того, как делает:

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

Я попытался ручной настройки contentSize.height, но ввел еще одно странное поведение, где содержание смещения, кажется, проигнорировано ..

'' Edit '': Это код, который используется для создания экземпляра текстового поля:

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; 

И «обновление» код, который проверяет позиционирующее содержание каждый кадр:

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

Как вы можете себе представить, setContentOffset бита есть то, что вызывает проблему.

Что происходит?

+0

Вы попробовали «хак», описанный здесь? http://stackoverflow.com/a/19137163/1153630 –

ответ

1

Я столкнулся с очень похожим вопросом в iOS7 с UITextField - выглядит почти точно так же. Моя тоже имела дело с вставками для контента.

Решение (для меня) - должно было устранить UITextField из nib/раскадровки и создать его экземпляр и добавить его к виду исключительно из кода. Поведение впоследствии продолжалось.

Я не знаю, что было кроме него, вероятно, это ошибка iOS7/XCode 5 ... Любопытно узнать, разрешает ли это это для вас тоже.

+0

Хмм, к сожалению, мой UITextField также был создан из кода:/ – kamziro

+0

Huh - Не могли бы вы бросить весь код, который вы используете для его создания? Хотелось бы попробовать и воспроизвести. Клянусь, у меня была такая же проблема пару дней назад; и подумал, что я исправил это, вытащив его из ножа ... может быть, я не помню, что я сделал. –

1

Мое количество было бы, чтобы настроить размер UITextView на основе его содержимого. спросило здесь

Как: how-do-i-size-a-uitextview-to-its-content

код взят из ответа 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, создайте свой собственный ответ, и я удалю мой, следовательно, это ваше решение, которое я представил – CodeFanatic

+0

Это моя текущая ситуация, но дело в том, что я хочу динамически прокручивать вниз, если содержимое текстового поля слишком велико. В настоящее время текстовое поле просто изменяется настолько, насколько это необходимо, и это проблема, потому что какой-то текст слишком велик и занимает весь экран. И если я ставлю ограничение на размер фрейма, хорошо ... вещь, которую я описал, происходит. – kamziro

3

пожалуйста, попробуйте это из предыдущей должности

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

[сообщение]: UITextView contentOffset on iOS 7 "предыдущая запись" \

+0

Кажется не работает:/Используя вышеприведенный код как есть, второй setContentOffset кажется, что он ничего не делает (он все еще прокручивается вверху), даже если текстовый курсор находится в нижней части.Изменение анимированного: ДА для анимированного: NO аннулирует первый setContentOffset. – kamziro

Смежные вопросы