Я создаю демонстрацию Swiftui, где у меня есть список редактируемых текстовых полей, используя Texteditor в Scrollview. Каждое поле динамически создано и использует пользовательский MultilInetextExtFieldView. Пользовательский интерфейс работает нормально, пока я не введу большое количество текста (например, 20–25 строк) в одном из текстовых полей. Как только это произойдет, клавиатура начинает освещать Texteditor, и я не могу прокрутить, чтобы увидеть или редактировать нижнюю часть текста. struct ContentView: View {
@State private var textItems: [TextItem] = [
TextItem(id: 1, text: "First text field"),
TextItem(id: 2, text: "Second text field"),
// More items...
]
@State private var keyboardHeight: CGFloat = 0
var body: some View {
NavigationView {
ScrollViewReader { proxy in
ScrollView {
LazyVStack(spacing: 16) {
ForEach($textItems) { $item in
MultilineTextFieldView(
text: $item.text,
placeholder: "Enter text for item \(item.id)...",
onEditingChanged: { isEditing in
if isEditing {
withAnimation {
proxy.scrollTo(item.id, anchor: .center)
}
}
}, onTextChanged: {}
)
.id(item.id)
}
}
.padding()
.padding(.bottom, keyboardHeight > 0 ? keyboardHeight - 34 : 0)
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) { notification in
if let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRect = keyboardFrame.cgRectValue
withAnimation {
keyboardHeight = keyboardRect.height
}
}
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
withAnimation {
keyboardHeight = 0
}
}
}
.navigationTitle("Multiline Text Fields")
}
}
}
struct MultilineTextFieldView: View {
@Binding var text: String
let placeholder: String
let onEditingChanged: (Bool) -> Void
let onTextChanged: () -> Void
@FocusState private var isFocused: Bool
var body: some View {
VStack(alignment: .leading, spacing: 8) {
HStack {
Text("Text Field")
Spacer()
Text("\(text.count) chars")
}
ZStack(alignment: .topLeading) {
RoundedRectangle(cornerRadius: 12)
.fill(Color(.systemGray6))
.stroke(isFocused ? Color.blue : Color.clear, lineWidth: 2)
if text.isEmpty {
Text(placeholder)
.foregroundColor(.secondary)
.padding(.horizontal, 16)
.padding(.vertical, 12)
.allowsHitTesting(false)
}
TextEditor(text: $text)
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(Color.clear)
.focused($isFocused)
.onChange(of: isFocused, perform: onEditingChanged)
.onChange(of: text, perform: { _ in onTextChanged() })
.fixedSize(horizontal: false, vertical: true)
}
.frame(minHeight: 40)
}
}
}
struct TextItem: Identifiable {
let id: Int
var text: String
}
< /code>
Что я попробовал: < /strong>
Добавление .fixedSize (horizontal: false, вертикальный: true) к текстовому обработке
padding the scrollview с помощью keyboardheight
с использованием scrollviewreader и. QueyboardwillhideNotification < /p>
Проблема: < /strong>
Когда текст внутри текстового сообщества растет, клавиатура перекрывает нижнюю часть текстового поля, и я не могу прокрутить или редактировать полный текст. Большой текст) остается видимым над клавиатурой.
note я попробовал с uikit uitextview с uiviewrepresentable и его работает нормально. Но я хочу это со Swiftui Texteditor.
Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-long-te
Swiftui Texteditor Inside Scrollview скрыт клавиатурой при вводе длинного текста ⇐ IOS
Программируем под IOS
1754630538
Anonymous
Я создаю демонстрацию Swiftui, где у меня есть список редактируемых текстовых полей, используя Texteditor в Scrollview. Каждое поле динамически создано и использует пользовательский MultilInetextExtFieldView. Пользовательский интерфейс работает нормально, пока я не введу большое количество текста (например, 20–25 строк) в одном из текстовых полей. Как только это произойдет, клавиатура начинает освещать Texteditor, и я не могу прокрутить, чтобы увидеть или редактировать нижнюю часть текста. struct ContentView: View {
@State private var textItems: [TextItem] = [
TextItem(id: 1, text: "First text field"),
TextItem(id: 2, text: "Second text field"),
// More items...
]
@State private var keyboardHeight: CGFloat = 0
var body: some View {
NavigationView {
ScrollViewReader { proxy in
ScrollView {
LazyVStack(spacing: 16) {
ForEach($textItems) { $item in
MultilineTextFieldView(
text: $item.text,
placeholder: "Enter text for item \(item.id)...",
onEditingChanged: { isEditing in
if isEditing {
withAnimation {
proxy.scrollTo(item.id, anchor: .center)
}
}
}, onTextChanged: {}
)
.id(item.id)
}
}
.padding()
.padding(.bottom, keyboardHeight > 0 ? keyboardHeight - 34 : 0)
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) { notification in
if let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRect = keyboardFrame.cgRectValue
withAnimation {
keyboardHeight = keyboardRect.height
}
}
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
withAnimation {
keyboardHeight = 0
}
}
}
.navigationTitle("Multiline Text Fields")
}
}
}
struct MultilineTextFieldView: View {
@Binding var text: String
let placeholder: String
let onEditingChanged: (Bool) -> Void
let onTextChanged: () -> Void
@FocusState private var isFocused: Bool
var body: some View {
VStack(alignment: .leading, spacing: 8) {
HStack {
Text("Text Field")
Spacer()
Text("\(text.count) chars")
}
ZStack(alignment: .topLeading) {
RoundedRectangle(cornerRadius: 12)
.fill(Color(.systemGray6))
.stroke(isFocused ? Color.blue : Color.clear, lineWidth: 2)
if text.isEmpty {
Text(placeholder)
.foregroundColor(.secondary)
.padding(.horizontal, 16)
.padding(.vertical, 12)
.allowsHitTesting(false)
}
TextEditor(text: $text)
.padding(.horizontal, 12)
.padding(.vertical, 8)
.background(Color.clear)
.focused($isFocused)
.onChange(of: isFocused, perform: onEditingChanged)
.onChange(of: text, perform: { _ in onTextChanged() })
.fixedSize(horizontal: false, vertical: true)
}
.frame(minHeight: 40)
}
}
}
struct TextItem: Identifiable {
let id: Int
var text: String
}
< /code>
[b] Что я попробовал: < /strong>
Добавление .fixedSize (horizontal: false, вертикальный: true) к текстовому обработке
padding the scrollview с помощью keyboardheight
с использованием scrollviewreader и. QueyboardwillhideNotification < /p>
Проблема: < /strong>
Когда текст внутри текстового сообщества растет, клавиатура перекрывает нижнюю часть текстового поля, и я не могу прокрутить или редактировать полный текст. Большой текст) остается видимым над клавиатурой.
note [/b] я попробовал с uikit uitextview с uiviewrepresentable и его работает нормально. Но я хочу это со Swiftui Texteditor.
Подробнее здесь: [url]https://stackoverflow.com/questions/79698287/swiftui-texteditor-inside-scrollview-is-hidden-by-keyboard-when-entering-long-te[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия