Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

981
Views
SwiftUI: poner un LazyVStack o LazyHStack en un ScrollView provoca tartamudeos (¿error de Apple?)

XCode Versión 12.4 (12D4e)

Me encontré con esto cada vez que implementé una pila Lazy dentro de ScrollView:

  1. Agregue un LazyHStack a un ScrollView horizontal o un LazyVStack a un ScrollView vertical
  2. Agregue suficiente contenido para que el tamaño del contenido de la vista de desplazamiento exceda sus límites

Escenario 1: tire de la vista de desplazamiento más allá de los límites (como si estuviera tirando para actualizar)

Comportamiento esperado : se comporta como se esperaba donde la vista de desplazamiento permanece bajo su dedo

Comportamiento observado : Tartamudea y salta

Escenario 2: desplácese rápido hasta el borde para que tenga que rebotar

Comportamiento esperado : Rebota suavemente

Comportamiento observado : Se detiene y tiembla cuando llega al borde, pero no rebota

Mi teoría Mi teoría es que, debido al uso de una pila Lazy, cuando una vista sale de la pantalla, se elimina de la jerarquía de vistas, creando un tartamudeo.

Me pregunto si alguien más se ha encontrado con esto. ¿Es esto un error en SwiftUI? He reproducido esto de manera confiable durante meses en diferentes proyectos y termino recurriendo a no usar Lazy Stacks, lo que desearía poder hacer.

Código de muestra

 ScrollView { LazyVStack { ForEach(viewModel.items) { items in SomeView(viewModel: .init(context: viewModel.context, item: item)) } }

Nota: el tartamudeo solo ocurre en la parte superior de la vista de desplazamiento

** Actualizado el 10 de julio de 2021 **

Esto sigue ocurriendo en iOS 15, versión 13.0 beta (13A5155e).

En el video a continuación, observe el comportamiento de la barra de desplazamiento y el tartamudeo cuando llegamos al final:

https://youtu.be/z2pybl5yYqk

** Actualizado el 19 de julio de 2021 **

Arranqué todo lo que estaba a mi vista y lo construí de nuevo uno por uno: LazyVStack comienza a tartamudear tan pronto como coloco un VStack/HStack/ZStack alrededor de un elemento de Text simple.

Si agrego fixedSize(horizontal: false, vertical: true) al elemento Text , parece que deja de tartamudear. Tan pronto como agrego un UIViewRepresentable de altura variable, comienza a tartamudear nuevamente.

Parece que en un LazyStack, cada niño debe tener algún tipo de tamaño fijo o una vista puramente SwiftUI para funcionar.

Seguiré investigando. Debo... resolver...

over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

Recibí una respuesta del DTS y confirmaron que es un error, pero no hay solución. Puede hacer referencia a mi ID de comentarios y presentar un elemento de comentarios. Me imagino que lo abordarán con la nueva versión rápida, porque creo que probablemente sea un defecto heredado y podría causar cambios importantes. En otras palabras, tiene que ver con los componentes nativos y la barra de navegación, y tienen que romper algunas cosas para arreglarlo. Esto significa que las aplicaciones de SwiftUI en iOS 14 podrían no ser compatibles nunca. Pero solo estoy especulando. Les avisaré a todos si tengo alguna noticia. Es realmente un bloqueador importante y arruina por completo la experiencia del usuario en mi opinión.

over 4 years ago · Santiago Trujillo Report

0

Confirmé que el problema se resolvió en iOS 15. No estoy seguro de si esto ayudó, pero también volví a compilar la aplicación con Xcode 13. 🚀

over 4 years ago · Santiago Trujillo Report

0

Puedo confirmar que el problema del tartamudeo todavía está presente en iOS 15 con Xcode 13. No estoy seguro de qué lo está causando, pero parece estar relacionado con la forma en que LazyStacks crea y diseña elementos.

Este es un MWE que reproduce el problema:

 ScrollView(.horizontal) { LazyHStack { Color.red.frame(width: 450) Color.green.frame(width: 250) Color.blue.frame(width: 250) } } .frame(width: 350)

En este ejemplo, el marco del color rojo parece "lo suficientemente ancho" como para provocar el tartamudeo cuando rebota en el borde delantero de la pantalla.

Reducir ligeramente el ancho hace que el tartamudeo desaparezca:

 ScrollView(.horizontal) { LazyHStack { Color.red.frame(width: 400) Color.green.frame(width: 250) Color.blue.frame(width: 250) } } .frame(width: 350)

Nota: probado en un iPhone Xs Max con Xcode 13 beta 1 y iOS 15 beta 1. Para este ejemplo en particular, el problema solo ocurre en el dispositivo (tal vez porque no puedo desplazarme lo suficientemente rápido en el simulador). Pero también he tenido este problema en vistas más complejas en el simulador.

over 4 years ago · Santiago Trujillo Report

0

Intente deshabilitar el rebote de ScrollView. Agregue la siguiente línea en onAppear o init,

UIScrollView.appearance().bounces = false

over 4 years ago · Santiago Trujillo Report

0

Agregué un rectángulo claro

 ScrollView { LazyVStack { Rectangle().foregroundColor(.clear).frame(height: 1.0) ... } }

y pareció resolver la mayoría de mis problemas que tengo con la tartamudez en LazyVStack en ScrollView.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!