当键盘出现时,将 SwiftUI 滚动视图滚动到底部

6
在我的SwiftUI项目中,我有以下的布局。
ScrollView {
    VStack {
        Text("some text that may change while editing the stuff below")
        TextField(...)
        TextField(...)
        Button(...)
    }
}

我希望的是当TextField获得焦点时,ScrollView自动滚动到最底部,也就是按钮可见。我尝试使用包裹好的UIScrollView和keyboardWillShow-notifications, 但在iOS 13和14上都没有找到有效的方法。

如何才能最好地实现这个功能?

1个回答

7
您可以通过使用ScrollViewReader来实现此目的,如果不想使用onTapGesture,则可以使用keyboardWillShow-notifications
ScrollView {
    ScrollViewReader { value in
        VStack {
            Text("some text that may change while editing the stuff below").id(0)
            TextField(...)
                .id(1)
                .onTapGesture {
                    withAnimation() {
                        value.scrollTo(3, anchor: .top) //or if you want the button in the center use .center
                    }
                 }
            TextField(...).id(2)
            Button(...).id(3)
        }
    }
}

1
太棒了!只需要添加一个布尔标志在“View”范围内,以便在滚动之前进行检查,并在“onTapGesture”中重置它,以避免当多次点击“textField”时出现连续和不受控制的滚动行为。 - Okhan Okbay
哇,我已经被这个问题困扰了好几天,这是最好的解决方案。 - Nickola Jarjous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接