2014-01-16 5 views
3

У меня есть приложение, содержащее UITextview, которое отображает статический текст. Я использовал UITextview для получения прокрутки текста, который намного длиннее, чем может отображаться в UILabel. По какой-то причине текст в UITextview под iOS 7 не остается прокручиваемым вверху после поворота. Это работает, как ожидалось, при работе под iOS 6.Текст UITextview, не показывающий верхние строки после вращения в iOS7

Это можно показать, создав проект с UITextview, который сосредоточен на раскадровке с полями около 50. Затем добавьте ограничения, которые привязывают UITextview к краям основного вида , Убедитесь, что текстовое поле содержит достаточное количество текста, чтобы вызвать прокрутки:

enter image description here

Теперь запустите приложение и текст будет правильно установлен в UITextView, с первой строкой показывает в верхней части. После поворота, текст будет сдвинут вниз:

enter image description here

После поворота назад к портрету, текст еще прокручивать несколько строк.

Все это прекрасно работает, если вы запустите его в прошивкой 6. Я попытался бы сделать много исследований и испробованы следующие возможные решения в viewWillLayoutSubviews, чтобы сделать текст пребывание в позиции:

[textView sizeToFit]; 
[textView layoutIfNeeded]; 

[textView setContentOffset:CGPointMake(0.0, 0.0)]; 

[textView scrollRectToVisible:CGRectMake(0.0, 0.0, 1.0, 1.0) animated:NO]; 

Ничто не работает. Кто-нибудь знает, как сохранить текст в позиции?

+0

Это только меня или это вопрос вроде тихо? Извините за удар, но я подозреваю, что это либо слишком раздражающая ошибка, либо я пропустил что-то простое. Любое понимание было бы оценено. – Bob

ответ

1

Попробуйте это:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [self.textView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 
} 

Я испытал это на прошивке 7.1.

0

У меня была та же проблема. Похоже, что использование UITextView из раскадровки создает множество небольших раздражающих ошибок (например, this). Мне удалось решить эту проблему путем создания UITextView программно:

-(void) viewDidLoad{ 
    self.textView=[[UITextView alloc] init]; 
    self.textView.translatesAutoresizingMaskIntoConstraints=NO; 
    [self.view addSubview:self.textView]; 

    NSDictionary* views = @{@"textView": self.textView}; 
    NSArray* vContrains=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[textView]-50-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:views]; 
    NSArray* hContrains=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[textView]-50-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:views]; 
    [self.view addConstraints:vContrains]; 
    [self.view addConstraints:hContrains]; 

} 
-(void)viewWillLayoutSubviews{ 
    [self.textView layoutIfNeeded]; 
    [self.textView sizeToFit]; 
} 
0

попробовал это на прошивке 8.

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    self.textView.contentInset = UIEdgeInsetsMake(0,0,0,0); 
} 
1

Вызовите scrollRangeToVisible UITextView: Сообщение от способа уведомления viewDidLayoutSubviews По мнению контроллера делегата. Это позволит отрегулировать диапазон после вращения, а также при первом показе.

-(void)viewDidLayoutSubviews { 

    [self scrollToTop]; 
} 

-(void) scrollToTop { 
    [self.textView setScrollEnabled:NO]; 
    [self.textView scrollRangeToVisible:NSMakeRange(0.0f, 0.0f)]; 
    [self.textView setScrollEnabled:YES]; 
} 
0

Подобно некоторым из вышеперечисленных:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    self.textView.scrollRectToVisible(CGRect(x:0,y:0,width:1,height:1),animated: false) 
    self.textView.layoutIfNeeded() 
    self.textView.sizeToFit() 
} 
Смежные вопросы