On iOS (iPhone Safari and WKWebView-based apps), focusing the channel chat text input causes the on-screen keyboard to appear but it overlays the input field rather than pushing it up. The result is the user cannot see what they are typing.
Steps to reproduce
Open RemoteTerm on an iPhone (Safari or any WKWebView-based browser/app)
Navigate to a channel conversation
Tap the message input field
On-screen keyboard appears — the input field is hidden behind it
Expected behaviour
The layout adjusts when the keyboard appears so the input field remains visible above the keyboard.
Root cause
The ConversationPane layout uses a standard flexbox column with no handling for the iOS virtual keyboard viewport change. When the keyboard appears, iOS reduces the visual viewport but the app does not detect or respond to this. Specifically:
No visualViewport API usage to detect keyboard height
No scrollIntoView() called on the input when it receives focus
No CSS viewport units that account for keyboard height (dvh/svh would handle this on iOS 15.4+)
The <meta name="viewport"> tag does not help here — iOS WebKit does not automatically push fixed/flex layouts above the keyboard the way Android does
Possible fixes
CSS approach (simplest): Use height: 100dvh (dynamic viewport height) on the root container instead of 100vh — on iOS 15.4+ this automatically shrinks when the keyboard is visible, which causes the flex layout to push the input above the keyboard.
JS approach (broader support): Listen on window.visualViewport resize events and adjust the container height or scroll the input into view on focus — covers older iOS versions.
## Description
On iOS (iPhone Safari and WKWebView-based apps), focusing the channel chat text input causes the on-screen keyboard to appear but it overlays the input field rather than pushing it up. The result is the user cannot see what they are typing.
## Steps to reproduce
1. Open RemoteTerm on an iPhone (Safari or any WKWebView-based browser/app)
2. Navigate to a channel conversation
3. Tap the message input field
4. On-screen keyboard appears — the input field is hidden behind it
## Expected behaviour
The layout adjusts when the keyboard appears so the input field remains visible above the keyboard.
## Root cause
The `ConversationPane` layout uses a standard flexbox column with no handling for the iOS virtual keyboard viewport change. When the keyboard appears, iOS reduces the visual viewport but the app does not detect or respond to this. Specifically:
- No `visualViewport` API usage to detect keyboard height
- No `scrollIntoView()` called on the input when it receives focus
- No CSS viewport units that account for keyboard height (`dvh`/`svh` would handle this on iOS 15.4+)
- The `<meta name="viewport">` tag does not help here — iOS WebKit does not automatically push fixed/flex layouts above the keyboard the way Android does
## Possible fixes
- **CSS approach (simplest):** Use `height: 100dvh` (dynamic viewport height) on the root container instead of `100vh` — on iOS 15.4+ this automatically shrinks when the keyboard is visible, which causes the flex layout to push the input above the keyboard.
- **JS approach (broader support):** Listen on `window.visualViewport` resize events and adjust the container height or scroll the input into view on focus — covers older iOS versions.
<!-- github-sync-id:4346344685 -->
I did some testing with a local build again your fix is working. It doesn't work though when running under Home Assistant supervisor. I'm exploring a fix for that.
I did some testing with a local build again your fix is working. It doesn't work though when running under Home Assistant supervisor. I'm exploring a fix for that.
<!-- github-comment-id:4348066060 -->
That's probably just because I haven't rebuilt the image yet and pushed a new version. I'll do that tomorrow once I'm back home.
That's probably just because I haven't rebuilt the image yet and pushed a new version. I'll do that tomorrow once I'm back home.
<!-- github-comment-id:4348176588 -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Description
On iOS (iPhone Safari and WKWebView-based apps), focusing the channel chat text input causes the on-screen keyboard to appear but it overlays the input field rather than pushing it up. The result is the user cannot see what they are typing.
Steps to reproduce
Expected behaviour
The layout adjusts when the keyboard appears so the input field remains visible above the keyboard.
Root cause
The
ConversationPanelayout uses a standard flexbox column with no handling for the iOS virtual keyboard viewport change. When the keyboard appears, iOS reduces the visual viewport but the app does not detect or respond to this. Specifically:visualViewportAPI usage to detect keyboard heightscrollIntoView()called on the input when it receives focusdvh/svhwould handle this on iOS 15.4+)<meta name="viewport">tag does not help here — iOS WebKit does not automatically push fixed/flex layouts above the keyboard the way Android doesPossible fixes
height: 100dvh(dynamic viewport height) on the root container instead of100vh— on iOS 15.4+ this automatically shrinks when the keyboard is visible, which causes the flex layout to push the input above the keyboard.window.visualViewportresize events and adjust the container height or scroll the input into view on focus — covers older iOS versions.Just pushed up a fix; I don't have an iPhone but lemme know if that fixes it for you
Unfortunately the issue persists. I’ll do some local testing to see if I can find a fix and will report back.
Ahh kk I have some company coming over tonight; maybe I can borrow an iphone haha
I did some testing with a local build again your fix is working. It doesn't work though when running under Home Assistant supervisor. I'm exploring a fix for that.
That's probably just because I haven't rebuilt the image yet and pushed a new version. I'll do that tomorrow once I'm back home.
Just pushed a fresh image 🙂 Feel free to open a new issue if the updated image doesn't work for you.