首页 > 解决方案 > scrollView 在 .sheet 中超出其边界

问题描述

我在 .sheet 模式中有一个视图。视图在垂直模式下超出 .sheet 边界,但在横向模式下很好。

该视图只有滚动视图,并且在滚动视图中,有一堆自定义 UI Kit 输入字段。

滚动视图:

    ScrollView(.vertical) {
    
            Text("Register")
            .font(.headline)
                .bold()
                .padding()
        
    
            SATextField(tag: 0, placeholder: "Name", changeHandler: { (name) in
                self.name = name
            }, onCommitHandler: {
                print("commit handler")
            }, text: self.name)
                .onTapGesture {
                    self.name = ""
                }
            .padding()
            .keyboardType(.default)
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(self.name == "" ? borderColor : Color.green, lineWidth: 2)
            )                                    
           .fixedSize(horizontal: false, vertical: true)


//more fields
        }

自定义输入字段:

struct SATextField: UIViewRepresentable {
    private let tmpView = WrappableTextField()
    
    //var exposed to SwiftUI object init
    var tag:Int = 0
    var placeholder:String?
    var fieldVariable:String?
    var changeHandler:((String)->Void)?
    var returnKeyType: UIReturnKeyType = .default
    var isSecureTextEntry: Binding<Bool>? = nil
    var onCommitHandler:(()->Void)?
    var text: String?
    
    func makeUIView(context: UIViewRepresentableContext<SATextField>) -> WrappableTextField {
        tmpView.tag = tag
        tmpView.delegate = tmpView
        tmpView.placeholder = placeholder
        tmpView.onCommitHandler = onCommitHandler
        tmpView.textFieldChangedHandler = changeHandler
        tmpView.isSecureTextEntry = isSecureTextEntry?.wrappedValue ?? false
        tmpView.returnKeyType = returnKeyType
        return tmpView
    }
    
    func updateUIView(_ uiView: WrappableTextField, context: UIViewRepresentableContext<SATextField>) {
        if text != nil {
            uiView.text = text
        }
        uiView.isSecureTextEntry = isSecureTextEntry?.wrappedValue ?? false
        uiView.setContentHuggingPriority(.defaultHigh, for: .vertical)
        uiView.setContentHuggingPriority(.fittingSizeLevel, for: .horizontal)
    }
}

添加 .frame(width: ) 或 .frame(minWidth: , IdealWidth: , maxWidth: ) 根本没有帮助,或者带来其他错误,例如将视图向右移动。 SwiftUI 中的 ScrollView 示例

标签: ios

解决方案


推荐阅读