Проблема 1:
Это связано с тем, что IQKeyboardManager размещает ScrollView поверх ViewController (Page), а RadListView имеет свою собственную прокручиваемую область. Решением будет настройка вставок, когда клавиатура активна.
Приведенный ниже код принимает высоту клавиатуры и кэширует ее в объекте приложения при первом отображении.
import * as application from "@nativescript/core/application";
let observer = application.ios.addNotificationObserver(
UIKeyboardDidShowNotification,
notification => {
application.ios.removeNotificationObserver(
observer,
UIKeyboardDidShowNotification
);
(application as any)._keyboardHeight = notification.userInfo.valueForKey(
UIKeyboardFrameBeginUserInfoKey
).CGRectValue.size.height;
}
);
Когда текстовое поле находится в фокусе, отрегулируйте вставки в виде списка
textFieldFocus() {
console.log("Focus on TextField");
(this
.radList as any)._originalContentInset = this.radList.ios.contentInset;
if ((application as any)._keyboardHeight) {
this.radList.ios.contentInset = UIEdgeInsetsMake(
(application as any)._keyboardHeight,
0,
0,
0
);
} else {
setTimeout(() => this.textFieldFocus(), 100);
}
}
Проблема 2:
Это связано с тем, что при обновлении текста макеты текстового представления сами по себе. Предотвращение этого может сохранить положение прокрутки нетронутым. Приведенное ниже переопределение проверяет, сфокусировано ли поле, и игнорирует вызовы макета.
import { TextView } from "@nativescript/core/ui/text-view";
TextView.prototype.requestLayout = function() {
if (
!arguments[0] &&
this.nativeViewProtected &&
this.nativeViewProtected.isFirstResponder
) {
this.nativeViewProtected.setNeedsLayout();
IQKeyboardManager.sharedManager().reloadLayoutIfNeeded();
} else {
View.prototype.requestLayout.call(this);
}
};
Обновленная площадка
person
Manoj
schedule
03.06.2020