iOS keyboard can collapse an upward popover to max-height 0
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- ios, react, typescript
- Área
- accessibility, frontend
Línea de trabajo
Start by locating getContainerDimensions and getMaxHeight in React Aria’s popover positioning code; the issue identifies their inconsistent use of the visual viewport origin as the cause. Trace how the viewport origin and pinch zoom handling feed the height calculation, then add a deterministic hook level regression test using the recorded viewport values. Done when the test verifies a positive available height instead of max-height: 0.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Provide a general summary of the issue here
An upward React Aria popover can receive max-height: 0 on iOS 26 Safari while the software keyboard is open. The visual viewport's offsetTop can disagree with the coordinate system used by the trigger and boundary rectangles.
🤔 Expected Behavior?
The popover should use the available space above its trigger, including its scrollable list, while the keyboard is visible.
😯 Current Behavior
On an iPhone 17 Simulator running iOS 26.5, the popover opened above a composer but only its search field was visible. React Aria calculated max-height: 0 for the content. In the observed state:
| Value | Measurement |
|---|---|
document.documentElement.scrollTop |
466 |
visualViewport.pageTop |
466 |
visualViewport.offsetTop |
310 |
visualViewport.height |
404 |
trigger getBoundingClientRect().top |
214 |
getContainerDimensions uses pageTop - scrollTop (0) as the viewport top, but getMaxHeight uses offsetTop (310). For a top popover, that makes the available height clamp to zero. The same calculation without the inconsistent offsetTop yields about 198 px in the reduced test case.
💁 Possible Solution
Use the visual viewport origin already calculated by getContainerDimensions when bounding popover height, including its existing pinch zoom handling.
🔦 Context
This affects an upward Collections picker with an internal search field above a bottom composer. The picker cannot display or scroll its choices while the keyboard is open. A deterministic regression test for the observed viewport values will be included in the proposed fix.
🖥️ Steps to Reproduce
- On iOS 26 Safari, place a React Aria popover above an input near the bottom of a scrolled page, with a search field inside the popover.
- Open the software keyboard, then open the popover with
placement="top". - Inspect the popover's computed
max-heightand thevisualViewportvalues above. The issue occurs when WebKit reports a positiveoffsetTopalthough the rects remain in the layout viewport's coordinates.
The hook-level regression test in the proposed PR fixes the recorded geometry at these values, verifies the current code returns max-height: 0, and checks the expected positive height after the change.
Version
react-aria 3.53.1
What browsers are you seeing the problem on?
Safari
If other, please specify.
N/A
What operating system are you using?
iOS 26.5 (iPhone 17 Simulator)
🧢 Your Company/Team
Independent application using React Aria
🕷 Tracking Issue
None
- Lenguaje dominante
- TypeScript
- Estrellas
- 16k
- Forks
- 1.6k
- Merge medio
- 4 d 3 h
- PR fusionados (30 d)
- 39
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de adobe/react-spectrum
-
@internationalized/number: NumberParser misparses Arabic-digit numbers that use . , or ، (sd parses ١٬٢٣٤.٥ as 12345)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
adobe/react-spectrum#10936 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
PreviewTrigger: the preview dialog has no accessible namePosiblemente ocupada @therealemmanueloppong la tomó hace 2 días. Abiertoaccessibility bug PreviewTrigger
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
adobe/react-spectrum#10917 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
S2 quiet Picker menu is always 192px wide: its width calc() has no unitPosiblemente ocupada @darshpatel1052 la tomó hace 5 días. Abiertowaiting on author
Dificultad 2/5 Menos de una hora Aptitud para principiantes 88/100
adobe/react-spectrum#10909 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
DatePicker omits timezone for initially empty fields despite zoned placeholderValuePosiblemente ocupada @mrlexcoder la tomó hace 5 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
adobe/react-spectrum#10900 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Separator adds a redundant role="separator" to its default <hr>Posiblemente ocupada @Janani-bn la tomó hace 6 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
adobe/react-spectrum#10894 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de adobe/react-spectrum
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
earendil-works/pi-claude-code#36 ·
Los mantenedores suelen responder en 6 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Resources: New work of jabodetabekPosiblemente ocupada @rmt-svc la tomó hoy. Abiertoresources
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
railmapgen/rmp-gallery#4167 ·
Los mantenedores suelen responder en 2 días
-
documentation p1
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
microsoft/monaco-editor#5577 ·
Los mantenedores suelen responder en 1 día