ionic-team / ionic-team/capacitor-keyboard

iOS: Keyboard is not resized properly when resize mode is changed from native to none

Open
#24 6 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
3
Forks
21
PR merge metrics
No merged PRs in 30d

Description

## Bug Report

### Plugin(s)

@capacitor/keyboard 6.0.2

### Capacitor Version

@capacitor/cli: 6.1.2
@capacitor/android: 6.1.2
@capacitor/ios: 6.1.2
@capacitor/core: 6.1.2

### Platform(s)

* iOS

### Current Behavior

When the keyboard is opened with the resize mode `native` and then the resize mode is switched to `none` while the keyboard is still open, closing the keyboard results in a black box since the web view is not reseted to its original bounds.

### Expected Behavior

Even when changing the resize mode back and forth, the web view should be displayed correctly.

### Code Reproduction

This can be i.e. fixed by adding a reset of the frame if the resize mode is "none".

```

- (void)_updateFrame
{
CGRect f, wf = CGRectZero;
UIWindow * window = nil;

if ([[[UIApplication sharedApplication] delegate] respondsToSelector:@selector(window)]) {
window = [[[UIApplication sharedApplication] delegate] window];
}

if (!window) {
if (@available(iOS 13.0, *)) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", UIWindowScene.class];
UIScene *scene = [UIApplication.sharedApplication.connectedScenes.allObjects filteredArrayUsingPredicate:predicate].firstObject;
window = [[(UIWindowScene*)scene windows] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"isKeyWindow == YES"]].firstObject;
}
}
if (window) {
f = [window bounds];
}
if (self.webView != nil) {
wf = self.webView.frame;
}
switch (self.keyboardResizes) {
case ResizeBody:
{
[self resizeElement:@"document.body" withPaddingBottom:_paddingBottom withScreenHeight:(int)f.size.height];
break;
}
case ResizeIonic:
{
[self resizeElement:@"document.querySelector('ion-app')" withPaddingBottom:_paddingBottom withScreenHeight:(int)f.size.height];
break;
}
case ResizeNative:
{
[self.webView setFrame:CGRectMake(wf.origin.x, wf.origin.y, f.size.width - wf.origin.x, f.size.height - wf.origin.y - self.paddingBottom)];
break;
}
case ResizeNone:
{
[self.webView setFrame:CGRectMake(wf.origin.x, wf.origin.y, f.size.width - wf.origin.x, f.size.height - wf.origin.y)];
break;
}
default:
break;
}
[self resetScrollView];
}
```

### Other Technical Details

-

### Additional Context

-

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.