Я пытаюсь разобраться в чате популярных помощников в чате ИИ, таких как CHATGPT, Le CHAT или недоумение в iOS с Swiftui. Если уже есть активная пара вопросов и ответов, которая видно, что пара должна прокручивать вверх, чтобы появилась новая пара вопросов и ответов. Прокрутка вниз по -прежнему покажет все предыдущие пары. Отправка другого сообщения снова прокрутит все, так что видна только новая пара. Как только клавиатура появится, Scrollview будет прокручивать вниз. Но я хотел бы, чтобы ScrollView игнорировал клавиатуру, а не прокручивал вообще для изменения размера. Но я вроде как потерян в том, какие другие варианты я мог попробовать. Возможно, используя что -то вроде Swift Interspect для доступа к базовому uiscrollview, но я также не уверен в том, какие свойства для изменения там для решения этой проблемы. alt = "Проблема" src = "https://i.sstatic.net/pb8jnivf.gif"/>
код из видео:
struct DemoView: View {
struct Message: Identifiable {
let id: UUID
let content: String
}
@State private var messages: [Message] = []
@State private var scrollPosition: UUID?
@State private var message = ""
var body: some View {
NavigationStack {
VStack {
GeometryReader { geometryProxy in
let scrollViewHeight = geometryProxy.size.height
ScrollView {
VStack(alignment: .leading, spacing: 10) {
ForEach(messages) { message in
VStack {
VStack(alignment: .trailing) {
Text(message.content)
.multilineTextAlignment(.leading)
.padding(.bottom, 20)
.frame(maxWidth: .infinity, alignment: .trailing)
}
VStack(alignment: .leading) {
Text("Assistant reply")
.multilineTextAlignment(.leading)
.padding(.bottom, 20)
.frame(maxWidth: .infinity, alignment: .leading)
}
}
.frame(
minHeight: message.id == messages.last?.id ? scrollViewHeight : 0,
alignment: .top
)
}
}
.frame(maxWidth: .infinity)
.padding(.horizontal, 20)
.ignoresSafeArea(.keyboard, edges: .bottom)
}
.scrollPosition(id: $scrollPosition, anchor: .bottom)
}
.safeAreaInset(edge: .bottom) {
VStack {
TextField("Ask anything...", text: $message)
.multilineTextAlignment(.leading)
.font(.body)
.onSubmit {
guard !message.isEmpty else {
return
}
let id = UUID()
messages.append(Message(id: id, content: message))
message = ""
withAnimation {
scrollPosition = id
}
}
}
.contentShape(Rectangle())
.frame(maxWidth: .infinity)
.padding(16)
.background(.gray)
.clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
}
}
.padding(16)
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... pt-like-ui
Swiftui scrollview поведение в Chatgpt, как пользовательский интерфейс ⇐ IOS
Программируем под IOS
1759655422
Anonymous
Я пытаюсь разобраться в чате популярных помощников в чате ИИ, таких как CHATGPT, Le CHAT или недоумение в iOS с Swiftui. Если уже есть активная пара вопросов и ответов, которая видно, что пара должна прокручивать вверх, чтобы появилась новая пара вопросов и ответов. Прокрутка вниз по -прежнему покажет все предыдущие пары. Отправка другого сообщения снова прокрутит все, так что видна только новая пара. Как только клавиатура появится, Scrollview будет прокручивать вниз. Но я хотел бы, чтобы ScrollView игнорировал клавиатуру, а не прокручивал вообще для изменения размера. Но я вроде как потерян в том, какие другие варианты я мог попробовать. Возможно, используя что -то вроде Swift Interspect для доступа к базовому uiscrollview, но я также не уверен в том, какие свойства для изменения там для решения этой проблемы. alt = "Проблема" src = "https://i.sstatic.net/pb8jnivf.gif"/>
[b] код из видео: [/b]
struct DemoView: View {
struct Message: Identifiable {
let id: UUID
let content: String
}
@State private var messages: [Message] = []
@State private var scrollPosition: UUID?
@State private var message = ""
var body: some View {
NavigationStack {
VStack {
GeometryReader { geometryProxy in
let scrollViewHeight = geometryProxy.size.height
ScrollView {
VStack(alignment: .leading, spacing: 10) {
ForEach(messages) { message in
VStack {
VStack(alignment: .trailing) {
Text(message.content)
.multilineTextAlignment(.leading)
.padding(.bottom, 20)
.frame(maxWidth: .infinity, alignment: .trailing)
}
VStack(alignment: .leading) {
Text("Assistant reply")
.multilineTextAlignment(.leading)
.padding(.bottom, 20)
.frame(maxWidth: .infinity, alignment: .leading)
}
}
.frame(
minHeight: message.id == messages.last?.id ? scrollViewHeight : 0,
alignment: .top
)
}
}
.frame(maxWidth: .infinity)
.padding(.horizontal, 20)
.ignoresSafeArea(.keyboard, edges: .bottom)
}
.scrollPosition(id: $scrollPosition, anchor: .bottom)
}
.safeAreaInset(edge: .bottom) {
VStack {
TextField("Ask anything...", text: $message)
.multilineTextAlignment(.leading)
.font(.body)
.onSubmit {
guard !message.isEmpty else {
return
}
let id = UUID()
messages.append(Message(id: id, content: message))
message = ""
withAnimation {
scrollPosition = id
}
}
}
.contentShape(Rectangle())
.frame(maxWidth: .infinity)
.padding(16)
.background(.gray)
.clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
}
}
.padding(16)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79782461/swiftui-scrollview-behavior-in-chatgpt-like-ui[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия