简体   繁体   English

如何使水平 ScrollView 适合内容的高度?

[英]How to fit horizontal ScrollView to content's height?

I have a horizontal scroll view with a LazyHStack .我有一个带有LazyHStack的水平滚动视图。 How do I size the scroll view to automatically fit the content inside?如何调整滚动视图的大小以自动适应里面的内容?

By default, ScrollView takes up all the vertical space possible.默认情况下,ScrollView 会占据所有可能的垂直空间。

struct ContentView: View {
    var numbers = 1...100
    var body: some View {
        ScrollView(.horizontal) {
            LazyHStack {
                ForEach(numbers, id: \.self) {
                    Text("\($0)")
                        .font(.largeTitle)
                }
            }
        }
    }
}

This code can be MUCH better这段代码可以更好

I have show it as BASE for your final solution我已经把它作为你最终解决方案的基础

But it works但它有效

在此处输入图像描述

struct ContentView1111: View {
    var numbers = 1...100
    
    var body: some View {
        VStack {
            FittedScrollView(){
                AnyView(
                    LazyHStack {
                        ForEach(numbers, id: \.self) {
                            Text("\($0)")
                                .font(.largeTitle)
                        }
                    }
                )
            }
            // you can see it on screenshot - scrollView size 
            .background(Color.purple) 
        
            Spacer()
        }
         // you can see it on screenshot - other background
        .background(Color.green)
    }
}

struct HeightPreferenceKey: PreferenceKey {
    typealias Value = CGFloat
    static var defaultValue: CGFloat = 40
    static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
        value = nextValue()
    }
}

struct FittedScrollView: View {
    var content: () -> AnyView
    
    @State private var contentHeight: CGFloat = 40
    var body: some View {
        VStack {
            ScrollView(.horizontal) {
                content()
                    .overlay(
                        GeometryReader { geo in
                            Color.clear
                                .preference(key: HeightPreferenceKey.self, value: geo.size.height)
                        })
            }
            .frame(height: contentHeight)
        }
        .onPreferenceChange(HeightPreferenceKey.self) {
            contentHeight = $0
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使scrollview的内容适合scrollview超级视图 - Fit content of a scrollview to the scrollview superview ScrollView有时无法容纳子视图的内容 - ScrollView can't fit it's subview's content sometimes 如何根据内容提供RTLabel和ScrollView的高度? - How to provide RTLabel and ScrollView height according to the content? SwiftUI - 如何获取 ScrollView 内容的大小(高度) - SwiftUI - How to get size (height) of ScrollView content 如何使用内部动态内容限制 ScrollView 的高度? - How to constrain height for ScrollView with dynamic content inside? 确定ScrollView内容的高度 - Determining height of ScrollView content 如何自动设置UICollectionViewCell的高度以适合内容 - How to automatically set height of UICollectionViewCell to fit content 水平ScrollView是否不适合其子ImageViews? - Horizontal ScrollView not fit its sub ImageViews? iOS,scrollView内容大小的高度等于内容视图的高度,但它仍然可以垂直滚动? - iOS, the height of scrollView content size is equal to the content view's height, but it can still scroll vertically? 动画化tableView的高度以使其适合屏幕上的内容 - Animating tableView's height to fit its content on the screen
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM