Я строю интерфейс чата в Swiftui, похожий на приложение Chatgpt, и я хочу, чтобы клавиатура имела аналогичное поведение на imessage, когда пользователь набирает ящик ввода, является выше клавиатуры, прокрутки чата и заголовок остаются в вершина. Но у меня проблемы с обработкой клавиатуры. Когда появляется клавиатура, она нажимает весь вид вместо того, чтобы просто настраивать область содержания чата, сохраняя при этом заправленное заголовок и поле ввода над клавиатурой. />
Когда появляется клавиатура, весь вид (включая заголовок) поднимается < /li>
Поле ввода иногда скрывается за клавиатурой < /li>
Область прокрутки контента не регулируется правильно < /li>
< /ul>
code < /h2>
Вот моя текущая реализация для Мой чат -раз
(у меня также есть SideMenuview, который, кажется, тоже подталкивается) < /p>
import SwiftUI
struct ChatView: View {
@State private var isMenuOpen = false
@State private var showSettings = false
@State private var showModelSelection = false
@State private var dragOffset: CGFloat = 0
@StateObject private var modelSelectionVM = ModelSelectionViewModel()
@StateObject private var chatHistoryVM = ChatHistoryViewModel()
@StateObject private var chatVM: ChatMessageViewModel
@FocusState private var isTextFieldFocused: Bool
private let menuWidth: CGFloat = UIScreen.main.bounds.width * 0.75
// **Scrollable Messages**
ScrollViewReader { proxy in
ScrollView {
LazyVStack(spacing: 8) {
if chatVM.isTemporaryChat && chatVM.messages.isEmpty {
Text("This chat won't appear in history, use or create memories, or be used to train our models. For safety purposes, we may keep a copy of this chat for up to 30 days.")
.foregroundColor(.secondary)
.multilineTextAlignment(.center)
.padding()
}
if showModelSelection {
ModelSelectionView(isPresented: $showModelSelection, viewModel: modelSelectionVM)
.transition(.move(edge: .bottom))
}
}
}
< /code>
ожидаемое поведение < /h2>
Заголовок должен оставаться фиксированным в верхней части < /li>
Чат Область содержания должна настроить его размер и прокрутка, когда появляется клавиатура < /li>
Поле ввода должно оставаться видимым и перемещаться с клавиатурой < /li>
Аналогично тому, как imessage обрабатывает клавиатуру Внешний вид
< /ul>
что я попробовал < /h2>
Использование .IgnoressaFearea (.keyboard, края: .bottom) < / Code>
Добавление наблюдателей за клавиатурой и вручную настраивать позиции просмотра
Использование GeometryReader для управления макетом
Различные комбинации ZSTACK и VSTACK
Различные подходы с SafeAreainsets
среда
ios 17+< /li>
swiftui < /li>
xcode 15.2
Вопрос
Как я могу правильно реализовать обработку клавиатуры в этом интерфейсе чата:
[*] Держите заголовок закрепленным в верхней части < /li>
Разрешить содержание чата регулировать и прокручивать надлежащим образом < /li>
Держите поле ввода видимым Выше клавиатуры
Поддерживайте плавную анимацию во время внешнего вида клавиатуры/исчезновения !
Я строю интерфейс чата в Swiftui, похожий на приложение Chatgpt, и я хочу, чтобы клавиатура имела аналогичное поведение на imessage, когда пользователь набирает ящик ввода, является выше клавиатуры, прокрутки чата и заголовок остаются в вершина. Но у меня проблемы с обработкой клавиатуры. Когда появляется клавиатура, она нажимает весь вид вместо того, чтобы просто настраивать область содержания чата, сохраняя при этом заправленное заголовок и поле ввода над клавиатурой. /> [list] [*] Когда появляется клавиатура, весь вид (включая заголовок) поднимается < /li> Поле ввода иногда скрывается за клавиатурой < /li> Область прокрутки контента не регулируется правильно < /li> < /ul> code < /h2> Вот моя текущая реализация для Мой чат -раз (у меня также есть SideMenuview, который, кажется, тоже подталкивается) < /p> import SwiftUI
struct ChatView: View { @State private var isMenuOpen = false @State private var showSettings = false @State private var showModelSelection = false @State private var dragOffset: CGFloat = 0 @StateObject private var modelSelectionVM = ModelSelectionViewModel() @StateObject private var chatHistoryVM = ChatHistoryViewModel() @StateObject private var chatVM: ChatMessageViewModel @FocusState private var isTextFieldFocused: Bool
private let menuWidth: CGFloat = UIScreen.main.bounds.width * 0.75
// **Scrollable Messages** ScrollViewReader { proxy in ScrollView { LazyVStack(spacing: 8) { if chatVM.isTemporaryChat && chatVM.messages.isEmpty { Text("This chat won't appear in history, use or create memories, or be used to train our models. For safety purposes, we may keep a copy of this chat for up to 30 days.") .foregroundColor(.secondary) .multilineTextAlignment(.center) .padding() }
if showModelSelection { ModelSelectionView(isPresented: $showModelSelection, viewModel: modelSelectionVM) .transition(.move(edge: .bottom)) } } } < /code> ожидаемое поведение < /h2>
Заголовок должен оставаться фиксированным в верхней части < /li> Чат Область содержания должна настроить его размер и прокрутка, когда появляется клавиатура < /li> Поле ввода должно оставаться видимым и перемещаться с клавиатурой < /li> Аналогично тому, как imessage обрабатывает клавиатуру Внешний вид < /ul> что я попробовал < /h2> [list] [*] Использование .IgnoressaFearea (.keyboard, края: .bottom) < / Code> [*] Добавление наблюдателей за клавиатурой и вручную настраивать позиции просмотра [*] Использование GeometryReader для управления макетом [*] Различные комбинации ZSTACK и VSTACK [*] Различные подходы с SafeAreainsets [/list] среда
[*] ios 17+< /li> swiftui < /li> xcode 15.2 [/list] Вопрос Как я могу правильно реализовать обработку клавиатуры в этом интерфейсе чата: [*] Держите заголовок закрепленным в верхней части < /li> Разрешить содержание чата регулировать и прокручивать надлежащим образом < /li> Держите поле ввода видимым Выше клавиатуры Поддерживайте плавную анимацию во время внешнего вида клавиатуры/исчезновения !
Недавно я столкнулся с проблемами при попытке изменить установку WordPress, переименовав файл index.php в site.php в корневом каталоге. Основная цель этого изменения заключалась в том, чтобы ввести специальные фильтры и перенаправления для различных...
Недавно я столкнулся с проблемами при попытке изменить установку WordPress, переименовав файл index.php в site.php в корневом каталоге. Основная цель этого изменения заключалась в том, чтобы ввести специальные фильтры и перенаправления для различных...
Я пытаюсь вычислить время, добавляя минуты к заданной дате и времени. Это хорошо работает с другим временем, но не для летнего времени .
public static GregorianCalendar addMinuts(GregorianCalendar newDate, int minutes) {
GregorianCalendar cal = new...
Я пытаюсь вычислить время, добавляя минуты к заданной дате и времени. Это хорошо работает с другим временем, но не для летнего времени .
public static GregorianCalendar addMinuts(GregorianCalendar newDate, int minutes) {
GregorianCalendar cal = new...
Я использую Pygame для создания приложения, которому нужен квадратный экран, 800x800. Он работает нормально, когда его окно, т. Е. Когда я просто делаю:
screen_width = 800
screen_height = 800
screen = pygame.display.set_mode((screen_width,...