objective c - El contenido de texto de UITextView no comienza desde arriba
objective-c xcode (22)
¡Esto funcionó mejor para mí! Coloqué esto dentro de viewDidLoad ().
//TextView Scroll starts from the top
myTextView.contentOffset.y = 0
Tengo un texto largo proveniente de mi archivo JSON, pero cuando hago clic en el enlace de mi UITableViewCell para ir a mi página UIViewController, el texto UITextView carga el contenido de la cadena pero no muestra el contenido desde el principio y tengo que desplazarme hacia arriba. el tiempo.
¿Lo que necesito hacer?
Agregar código a viewdidload
self.automaticallyAdjustsScrollViewInsets = NO;
Aquí hay otra forma de hacerlo que siempre funciona para mí. C objetivo:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.textView setContentOffset:CGPointZero animated:NO];
}
Y en Swift:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
textView.setContentOffset(CGPointZero, animated: false)
}
Así es como lo hice. Subclasifiqué la vista de texto y:
override func willMoveToSuperview(newSuperview: UIView?) {
self.scrollEnabled = false
}
override func layoutSubviews() {
super.layoutSubviews()
self.scrollEnabled = true
}
Desde el guión gráfico, seleccione el controlador de vista en el que tiene colocada la vista de texto. En el inspector de atributos, desmarque "Ajustar recuadros de vista de desplazamiento". Eso es.
En Swift 2, solución Xcode 7, para dejar el desplazamiento habilitado y que el texto comience en la parte superior, esto es todo lo que necesita:
@IBOutlet weak var myUITextView: UITextView!
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
//start scroll at top of text
myUITextView.scrollRangeToVisible(NSMakeRange(0, 0))
}
En lugar de establecer el desplazamiento del contenido desde viewDidLayoutSubviews , puede escribir layoutIfNeeded desde viewDidLoad para establecer la posición correcta de la vista de texto como se muestra a continuación:
self.textView.layoutIfNeeded()
self.textView.setContentOffset(CGPoint.zero, animated: false)
Salud !!
Esta es la única forma que funcionó para mí. Desactivo el desplazamiento de UITextView antes de que se cargue la vista y luego lo habilito nuevamente:
override func viewWillAppear(_ animated: Bool) {
yourTextView.isScrollEnabled = false
}
override func viewDidAppear(_ animated: Bool) {
yourTextView.isScrollEnabled = true
}
Las respuestas a la pregunta El espacio en blanco en la parte superior de UITextView en iOS 10 proporciona una experiencia de usuario final mucho más limpia.
En
viewDidLoad
del controlador de vista que contiene la vista de texto:
self.automaticallyAdjustsScrollViewInsets = false
La configuración de
textView.setContentOffset(CGPointMake(0,0), animated: false)
y algunas de estas otras sugerencias funcionan cuando se llama en
viewDidLayoutSubviews()
pero en dispositivos más antiguos como iPad 2 y anteriores, verá que el texto se desplaza cuando el Se muestra la pantalla.
Eso no es algo que quiera que vea el usuario final.
Mediante Programmatic antes de cargar el contenido, deshabilite la propiedad de desplazamiento de textview
textview.scrollenabled = NO;
Y después de cargar, habilite el desplazamiento de textview
textview.scrollenabled = YES;
Además, verifique el
XIB
, siempre no verifique el desplazamiento habilitado de Textview.
Para mí funciona bien este código:
textView.attributedText = newText //or textView.text = ...
//this part of code scrolls to top
textView.contentOffset.y = -64 //or = 0 if no Navigation Bar
textView.scrollEnabled = false
textView.layoutIfNeeded()
textView.scrollEnabled = true
Para desplazarme a la posición exacta y mostrarla en la parte superior de la pantalla, uso este código:
var scrollToLocation = 50 //<needed position>
textView.contentOffset.y = textView.contentSize.height
textView.scrollRangeToVisible(NSRange.init(location: scrollToLocation, length: 1))
Establecer contentOffset.y se desplaza al final del texto y luego scrollRangeToVisible se desplaza hacia arriba al valor de scrollToLocation. Por lo tanto, la posición necesaria aparece en la primera línea de scrollView.
Similar a algunas otras respuestas, pero con el beneficio adicional de que no provocará un desplazamiento hacia arriba en las rotaciones posteriores del dispositivo. Funciona bien en Swift 2.2
/// Whether view has laid out subviews at least once before.
var viewDidLayoutSubviewsAtLeastOnce = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if !viewDidLayoutSubviewsAtLeastOnce {
textView.setContentOffset(CGPoint(x: 0, y: -textView.contentInset.top), animated: false)
}
viewDidLayoutSubviewsAtLeastOnce = true
}
Swift 3.0
override func viewWillAppear(_ animated: Bool) {
privacyText.isScrollEnabled = false
}
override func viewDidAppear(_ animated: Bool) {
privacyText.isScrollEnabled = true
}
Todavía tenía problemas después de usar estas soluciones. El problema definitivamente parece estar relacionado con tener barras de navegación transparentes y seleccionar ajustar automáticamente las inserciones de contenido en el controlador de vista. Si no le importa que su texto se desplace debajo de la barra de navegación, entonces es mejor dejar esta configuración desactivada y restringir la parte superior de su vista de texto a la parte inferior de la barra de navegación, en lugar de a la parte superior del controlador de vista.
Si, como yo, querías que apareciera debajo de tu barra de navegación cuando te desplazas hacia abajo; entonces la solución que funcionó para mí fue agregar esto.
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGFloat offset = self.navigationController.navigationBar.frame.size.height+[UIApplication sharedApplication].statusBarFrame.size.height;
[self.textView setContentOffset:CGPointMake(0, -offset) animated:NO];
}
Esto solo busca la altura de la barra de navegación y la barra de estado y ajusta el desplazamiento del contenido en consecuencia.
Tenga en cuenta que una desventaja de este enfoque es que cuando el dispositivo gira, terminará desplazándose hacia arriba.
Tuve el mismo problema y resultó que tenía que establecer el desplazamiento del contenido en viewDidLayoutSubviews para que surta efecto. Estoy usando este código para mostrar el texto estático atribuido.
- (void)viewDidLayoutSubviews {
[self.yourTextView setContentOffset:CGPointZero animated:NO];
}
SWIFT 3:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.textView.setContentOffset(CGPoint.zero, animated: false)
}
Versión rápida:
override func viewDidLayoutSubviews() {
yourTextView.setContentOffset(CGPointZero, animated: false)
}
agregue la siguiente función a su clase de controlador de vista ...
Swift 3
override func viewDidLayoutSubviews() {
self.mainTextView.setContentOffset(.zero, animated: false)
}
Swift 2.1
override func viewDidLayoutSubviews() {
self.mainTextView.setContentOffset(CGPointZero, animated: false)
}
Objective C
- (void)viewDidLayoutSubviews {
[self.mainTextView setContentOffset:CGPointZero animated:NO];
}
在 你 在 ViewDidAppear 里面 加上 滚动 , 这样 用户 会 看到 他 往上 滚动 到 第一 行
en swift 4 con texto atribuido cualquiera de las respuestas no me ayuda y combino algunas respuestas en el tema.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
uiTextview.isScrollEnabled = false
}
override func viewDidAppear(_ animated: Bool) {
uiTextview.isScrollEnabled = true
uiTextview.setContentOffset(CGPoint.zero, animated: false)
}
Pasos para resolver
- Deshabilitar la vista de desplazamiento UITextView
- establecer scrollRectToVisible Habilitar
- Desplazamiento UITextView
Swift 3:
self.yourTextView.isScrollEnabled = false
let rect:CGRect = CGRect(x: 0, y: 0, width: 1, height: 1)
self.yourTextView.scrollRectToVisible(rect, animated: false)
self.yourTextView.isScrollEnabled = true
Esto funcionó para mí.
Pon este código en tu clase
override func viewDidLayoutSubviews() {
self.About_TV.setContentOffset(.zero, animated: false) // About_TV : your text view name)
}
Versión rápida
Se necesitará una combinación de cosas:
1.) Configure su salida
@IBOutlet var textView: UITextView!
2.) En el guión gráfico en el Controlador de vista, desactive "Ajustar recuadros de vista de desplazamiento"
3.) Establezca el contenido en cero superior agregando a continuación a su controlador de vista
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
myUITextView.setContentOffset(CGPointZero, animated: false)
}
[self.textView scrollRangeToVisible:NSMakeRange(0, 1)];
a la
viewDidLoad