Как я могу отобразить ScrollView так, чтобы его прокрутка была в правильном идентификаторе во время макета?IOS

Программируем под IOS
Ответить
Anonymous
 Как я могу отобразить ScrollView так, чтобы его прокрутка была в правильном идентификаторе во время макета?

Сообщение 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..

Подробнее здесь: https://stackoverflow.com/questions/797 ... rect-id-du
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»