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

iOS17.2中HStack内嵌自定义视图时view-aligned的scrollPosition失效求助

iOS 17.2中HStack嵌套自定义视图时scrollPosition无法正常更新的问题

在iOS 17.2版本中,当HStack内部使用自定义视图时,scrollPosition修饰器无法正常更新绑定的滚动ID。滚动视图时,绑定的scrollID值完全不会变化。

复现代码

struct NumberView: View {
    var number: Int
    var body: some View {
        Text("\(number)").frame(width: 150, height: 150).background(.red)
    }
}

struct ContentView: View {
    struct identifiableNumber: Identifiable, Hashable {
        var id: Int {
            return number
        }
        let number: Int
    }
    
    @State var scrollID: Int?
    let allNumbers: [identifiableNumber] = [identifiableNumber(number: 0), identifiableNumber(number: 1), identifiableNumber(number: 2), identifiableNumber(number: 3), identifiableNumber(number: 4)]
    
    var body: some View {
        Text("\(scrollID ?? -1)")
        ScrollView(.horizontal, showsIndicators: false) {
            HStack {
                ForEach(allNumbers) { numberIn in
                    NumberView(number: numberIn.number).scrollTargetLayout()
                }
            }.frame(height: 100).scrollTargetLayout()
        }.scrollTargetBehavior(.viewAligned(limitBehavior: .always))
            .defaultScrollAnchor(.leading)
            .scrollPosition(id: $scrollID)
    }
}

已知临时方案(无法适配我的业务场景)

  • 使用LazyHStack替代HStack
  • 放弃自定义视图,直接在ForEach中编写原生组件(如直接使用Text)

咨询问题

  1. 有没有其他可行的解决办法?
  2. 如何提交SwiftUI的bug?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:16:13