Ниже вы найдете пример представления моей проблемы. Он имеет одну кнопку, которая при нажатии будет переключаться между двумя видами прокрутки, используя withanimation , устанавливая позицию прокрутки на 2 -й и 3 -й элементы для любого представления прокрутки в onaperly .
Намерение состоит в том, чтобы иметь фон элементов в каждом переходе, плавно из своей позиции в одном списке, в их положении. Тем не менее, это не так легко возможно при установлении позиции списка с использованием идентификации инициализации прокрутки: < /p>
[*] Инициализация прокрутки с правильным идентификатором и составлением Scrollview, который, по -видимому, не имеет эффекта - Scrollview будет нарисован на вершине Scroll < /li>
. Прокрутите эту позицию в OnapeAr . Тем не менее, кажется, что при этом, MatchEdgeMetryEffect интерполирует положение элементов, как если бы ContentOffSet.y Scrollview кратко 0, что приводит к странному эффекту
Пожелай, что эти два списка быстро выдвинуты, что позволяет код> код> код> код> код> код> кодовой, что ищет/код, не позволяя справиться с помощью/кодовой, не позволяя
Видео < /p>
Кажется, мне либо нужно, чтобы < /p>
a) Убедитесь, что список изложен в правильном месте Y (очень сложно с динамическими элементами списка, но, по -видимому, решает эту проблему, если установление Lopicitly) < /p> pr /p> pr /p> ptry -lod while)
pryid, что это урегулирует), но, кажется, решает эту проблему) < /p> pryid, что это устранение. В правильном идентификаторе заранее (не смог выяснить, как)
c) Убедитесь, что анимация сопоставленного геометрического эффекта игнорирует краткое смещение «0» y scrollview перед установкой позиции идентификатора в Onapear (не смог выяснить, как)
, что я должен использовать Vstack здесь для матчи. /> Есть идеи по решению этого?import SwiftUI
struct Item: Identifiable {
let id = UUID().uuidString
var height: CGFloat
var label: String
}
enum TestScrollListStyle {
case primary
case alternate
}
struct TestScrollList: View {
let items: [Item]
let style: TestScrollListStyle
let namespace: Namespace.ID
@Binding var scrollPosition: ScrollPosition
var initialIndex: Int = 2
var body: some View {
ScrollView {
VStack(spacing: style == .primary ? 8 : 16) {
ForEach(items, id: \.id) { item in
switch style {
case .primary:
Text(item.label)
.frame(maxWidth: .infinity)
.frame(height: item.height)
.padding(.horizontal)
.background(
Rectangle()
.fill(.blue.opacity(0.15))
.matchedGeometryEffect(id: item.id, in: namespace)
)
case .alternate:
HStack {
Circle()
.fill(.green.opacity(0.25))
.frame(width: 24, height: 24)
Text(item.label)
.frame(maxWidth: .infinity, alignment: .leading)
}
.frame(height: item.height)
.padding(.horizontal)
.background(
Rectangle()
.fill(.green.opacity(0.08))
.matchedGeometryEffect(id: item.id, in: namespace)
)
}
}
}
.scrollTargetLayout()
.padding(.vertical)
}
.scrollPosition($scrollPosition, anchor: .top)
.onAppear {
var tx = Transaction()
tx.disablesAnimations = true
withTransaction(tx) {
if items.indices.contains(initialIndex) {
scrollPosition.scrollTo(id: items[initialIndex].id)
}
}
}
}
}
struct ContentView: View {
@Namespace private var matchedNamespace
@State private var items: [Item] =
(0..
Подробнее здесь: https://stackoverflow.com/questions/797 ... rect-id-du
Как я могу отобразить ScrollView так, чтобы его прокрутка была в правильном идентификаторе во время макета? ⇐ IOS
Программируем под IOS
1759249063
Anonymous
Ниже вы найдете пример представления моей проблемы. Он имеет одну кнопку, которая при нажатии будет переключаться между двумя видами прокрутки, используя withanimation , устанавливая позицию прокрутки на 2 -й и 3 -й элементы для любого представления прокрутки в onaperly .
Намерение состоит в том, чтобы иметь фон элементов в каждом переходе, плавно из своей позиции в одном списке, в их положении. Тем не менее, это не так легко возможно при установлении позиции списка с использованием идентификации инициализации прокрутки: < /p>
[*] Инициализация прокрутки с правильным идентификатором и составлением Scrollview, который, по -видимому, не имеет эффекта - Scrollview будет нарисован на вершине Scroll < /li>
. Прокрутите эту позицию в OnapeAr . Тем не менее, кажется, что при этом, MatchEdgeMetryEffect интерполирует положение элементов, как если бы ContentOffSet.y Scrollview кратко 0, что приводит к странному эффекту
Пожелай, что эти два списка быстро выдвинуты, что позволяет код> код> код> код> код> код> кодовой, что ищет/код, не позволяя справиться с помощью/кодовой, не позволяя
Видео < /p>
Кажется, мне либо нужно, чтобы < /p>
a) Убедитесь, что список изложен в правильном месте Y (очень сложно с динамическими элементами списка, но, по -видимому, решает эту проблему, если установление Lopicitly) < /p> pr /p> pr /p> ptry -lod while)
pryid, что это урегулирует), но, кажется, решает эту проблему) < /p> pryid, что это устранение. В правильном идентификаторе заранее (не смог выяснить, как)
c) Убедитесь, что анимация сопоставленного геометрического эффекта игнорирует краткое смещение «0» y scrollview перед установкой позиции идентификатора в Onapear (не смог выяснить, как)
, что я должен использовать Vstack здесь для матчи. /> Есть идеи по решению этого?import SwiftUI
struct Item: Identifiable {
let id = UUID().uuidString
var height: CGFloat
var label: String
}
enum TestScrollListStyle {
case primary
case alternate
}
struct TestScrollList: View {
let items: [Item]
let style: TestScrollListStyle
let namespace: Namespace.ID
@Binding var scrollPosition: ScrollPosition
var initialIndex: Int = 2
var body: some View {
ScrollView {
VStack(spacing: style == .primary ? 8 : 16) {
ForEach(items, id: \.id) { item in
switch style {
case .primary:
Text(item.label)
.frame(maxWidth: .infinity)
.frame(height: item.height)
.padding(.horizontal)
.background(
Rectangle()
.fill(.blue.opacity(0.15))
.matchedGeometryEffect(id: item.id, in: namespace)
)
case .alternate:
HStack {
Circle()
.fill(.green.opacity(0.25))
.frame(width: 24, height: 24)
Text(item.label)
.frame(maxWidth: .infinity, alignment: .leading)
}
.frame(height: item.height)
.padding(.horizontal)
.background(
Rectangle()
.fill(.green.opacity(0.08))
.matchedGeometryEffect(id: item.id, in: namespace)
)
}
}
}
.scrollTargetLayout()
.padding(.vertical)
}
.scrollPosition($scrollPosition, anchor: .top)
.onAppear {
var tx = Transaction()
tx.disablesAnimations = true
withTransaction(tx) {
if items.indices.contains(initialIndex) {
scrollPosition.scrollTo(id: items[initialIndex].id)
}
}
}
}
}
struct ContentView: View {
@Namespace private var matchedNamespace
@State private var items: [Item] =
(0..
Подробнее здесь: [url]https://stackoverflow.com/questions/79779063/how-can-i-render-a-scrollview-so-that-its-scrollposition-is-at-the-correct-id-du[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия