SwiftUI tvOS: NavigationLink с пользовательским стилем кнопок отключает автоматическую прокрутку в представлении списка
Я хочу добиться поведения прокрутки в пользовательском стиле кнопки в
NavigationLink
.
NavigationLink {
Color.blue
} label: {
listItem(model: model)
}
.buttonStyle(
HomeCardStyle(onFocusChange: { isFocused in
if isFocused {
// My Custom Code
}
})
)
Код стиля кнопки:
struct HomeCardStyle: ButtonStyle {
let onFocusChange: (Bool) -> Void
@Environment(\.isFocused) private var focused: Bool
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.overlay(
Rectangle()
.stroke(
Color.yellow,
lineWidth: focused ? Constants.UI.Padding.xxSmall : Constants.UI.Padding.zero
)
.shadow(
color: focused ? .yellow : .clear,
radius: Constants.UI.Padding.xxxxxSmall,
x: Constants.UI.Padding.zero,
y: Constants.UI.Padding.one
)
)
.contentShape(Rectangle())
.padding(.horizontal, focused ? Constants.UI.Padding.default : Constants.UI.Padding.zero)
.scaleEffect(focused ? Constants.UI.Frame.homeFeaturedItemScaleMedium : Constants.UI.Frame.homeFeaturedItemScaleRegular)
.animation(.linear(duration: Constants.UI.AnimationDuration.indicator), value: focused)
.onChange(of: focused) { newValue in
onFocusChange(newValue)
}
}
}
У меня есть требование показать пользовательский индикатор, поэтому я использую пользовательский стиль кнопки. Итак, у меня есть горизонтальный список вышеперечисленного, как показано на изображении ниже:
Теперь проблема в случае
.buttonStyle(.card)
, список автоматически прокручивается вверх, когда фокус переходит на
NavigationLinks
. Но это не работает, если я использую собственный стиль кнопки.
Как я могу добиться такого же поведения?