Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

991
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda