2015-08-26 22 views
6

In iOS 7 e/o 8, scorrendo la mia UITextView verso l'alto a livello di codice funziona come previsto in viewDidLoad:iOS 9 scorrimento UITextView in cima

[self.someTextView scrollRangeToVisible:NSMakeRange(0, 0)]; 

Ora è solo carichi alla mia qualche altro fotogramma. La mia ipotesi è che si sta caricando sul mio contenutoOffset UIEdgeInsetsMake(0, 0, 65, 0)

Come faccio a fare questo lavoro> = iOS9?

Nota: Ho già provato la messa in viewDidAppear senza risultati


EDIT il problema si verifica in circostanze in cui il mio testo UITextView è maggiore dell'altezza della sua vista. Io uso UIEdgeInsets perché la vista è presentata in modo modale ed è leggermente più grande dei limiti dello schermo. Tuttavia, il scrollRangeToVisible funziona ancora iOS 7/8 ma non iOS9, in questa circostanza

+0

Hai provato con '[auto. someTextView setContentOffset: CGPointZero animato: YES]; '. O usando in 'willLayoutsubviews'? – anhtu

+0

Nessuno dei due lavora nella mia circostanza. – soulshined

+1

Inserisci in 'viewDidLayoutSubviews'? – anhtu

risposta

17

cercare di posizionare il codice in viewDidLayoutSubviews

+0

Questo è anche ciò che ho finito per fare. Tristemente, sembra che venga erroneamente visualizzato prima brevemente e poi si corregge da sé. Grazie Apple per diminuire la qualità delle app di tutti in un colpo solo. – devios1

+1

Stava usando 'scrollRangeToVisible:' before (che non ha alcun parametro 'animated:'), ma cambiandolo in 'scrollRectToVisible:' come @ suggerisce thekenner33 (e passando 'NO' per' animated: ') risolve il problema di rendering iniziale. – devios1

+0

Risolve perfettamente il mio problema. Grazie! – Roger

1

Hai provato a usare

[self.someTextView scrollRectToVisible:CGRectMake(0, 0, x, x) animated:YES] 

dove x è una certa larghezza diverso da zero? Sembra che lo scrollRectToVisible: scorra più in alto di scrollRangeToVisible:.

+1

nell'esempio, sarebbe 'self.someTextView.layer' per poter utilizzare tale riferimento, tuttavia non funziona nella mia circostanza. Si prega di modificare, solo così non si accumulano voti. Oppure completare il metodo aggiungendo 'animated' alla sintassi – soulshined

5

Ho avuto lo stesso problema su iOS 9, e questa soluzione riparato:

@property (nonatomic) bool workaroundIOS9Bug; 

- (void)viewDidLoad { 
    self.workaroundIOS9Bug = [[UIDevice currentDevice].systemVersion floatValue] >= 9.0; 
} 


-(void)viewDidLayoutSubviews { 
    if (self.workaroundIOS9Bug) { 
    self.textView.contentOffset = CGPointZero; 
    self.workaroundIOS9Bug = false; 
    } 
} 

Significato, è necessario solo per fare questa radura extra di contentOffset del la prima volta che vengono presentate le sottoview. Fare tutto il tempo sarebbe un dolore quando l'utente ruota lo schermo o sta facendo altro con la vista.