You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI ScrollView无法随键盘抬起问题求助(兼容iOS14)

SwiftUI键盘弹出时ScrollView内容不向上偏移的问题

问题描述

我需要实现键盘弹出时ScrollView内容随之向上偏移的效果,但目前正常状态下无法实现。奇怪的是,把ScrollView翻转180度后这个功能就正常了!但我不能这么做——因为我要给内容加.contextMenu(...),翻转会触发iOS15下的严重bug。另外,应用必须兼容iOS14。

演示代码

import SwiftUI

struct ContentView: View {
    @State var text: String = ""

    var body: some View {
        VStack {
            ScrollView() {
                LazyVStack {
                    ForEach(1..<201, id: \.self) { num in
                        Text("Message \(num)")
                    }
//                    .upsideDown() // 启用此修饰符可使ScrollView内容随键盘抬起
                }
            }
//            .upsideDown() // 启用此修饰符可使ScrollView内容随键盘抬起
            
            TextField("Your text here", text: $text)
                .textFieldStyle(.roundedBorder)
                .padding()
        }
        .navigationBarTitleDisplayMode(.inline)
        .navigationTitle("Example app")
    }
}

extension View {
    func upsideDown() -> some View {
        self.rotationEffect(.degrees(180))
    }
}

行为演示

  • 翻转后的正常效果:
    翻转后的正常效果
  • 正常ScrollView的异常效果:
    正常ScrollView的异常效果

已尝试方案

  • 试过通过监听焦点状态来处理键盘偏移的方案,但无效
  • 尝试在键盘弹出时给ScrollView设置等于键盘高度的偏移,也没有效果

疑问

  1. 为什么翻转ScrollView后功能正常,正常状态下却不行?
  2. 为什么两种情况下TextField都会被抬起,但正常状态下ScrollView内容却不会?

内容的提问来源于stack exchange,提问作者MglSaRu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:15:39