Swiftui MatchededeDegeTryEffect «Несколько вставленных представлений в сопоставленной паре группы геометрии предупрежденIOS

Программируем под IOS
Anonymous
Swiftui MatchededeDegeTryEffect «Несколько вставленных представлений в сопоставленной паре группы геометрии предупрежден

Сообщение Anonymous »

I would like to achieve a slide animation of an underline moving from one tab to another when the user selects a different one
Изображение

I'm using matchedGeometryEffect as follows:

Код: Выделить всё

       HStack(spacing: 15) {
ForEach(categories, id: \.self) { category in
let isSelected = selectedVal == category
Button {
withAnimation {
selectedVal = category
}
} label: {
VStack(spacing: 4) {
Text(category)
.frame(width: 100)
if isSelected {
RoundedRectangle(cornerRadius: 5)
.frame(width: 50, height: 2)
.matchedGeometryEffect(id: "Category", in: animation, isSource: isSelected)
}
}
}
}
}
Этот подход работает с предупреждением о нескольких вставленных представлениях в паре группируемых геометрии (First: «Category», Second: Swiftui.namespace.id (id: 10)) иметь Issource: True, результаты не определены. исчезает: < /p>

Код: Выделить всё

      HStack(spacing: 15) {
ForEach(categories, id: \.self) { category in
let isSelected = selectedVal == category
VStack(spacing: 4) {
Button(category) {
withAnimation {
selectedVal = category
}
}

if isSelected {
RoundedRectangle(cornerRadius: 5)
.frame(width: 50, height: 2)
.matchedGeometryEffect(id: "Category", in: animation, isSource: isSelected)
}
}
}
}
Я подозреваю, что это связано с кнопкой не удалена из иерархии представления в первом решении, и поэтому все еще содержит ссылку на RoundeDrectangle , которая смущает MatchEdgeMetry, так как вы не можете иметь источник «видимый». Есть ли объяснение того, почему я получаю предупреждение в первом сценарии?

Подробнее здесь: https://stackoverflow.com/questions/649 ... etry-group

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