簡體   English   中英

帶有 UIViewRepresentable 的 UIPickerView 不填滿整個寬度

[英]UIPickerView with UIViewRepresentable does not fill the whole width

不幸的是,當我在 SwiftUI 中使用 UIViewRepresenable 創建一個 UIPickerView 時,它並沒有填滿整個屏幕。 我也試過給它很多框架修改器,但沒有任何效果。 有沒有人對此有解決方案或者知道為什么整個屏幕的寬度沒有被選擇器填滿? 最好的祝福

這是代碼:

struct MultiComponentsPicker: UIViewRepresentable {
    
    @Binding var hours: Int
    @Binding var minutes: Int
    @Binding var seconds: Int
    
    func makeUIView(context: Context) -> UIPickerView {
        let pickerView = UIPickerView()
        pickerView.delegate = context.coordinator
        pickerView.dataSource = context.coordinator
        
        return pickerView
    }
    
    func updateUIView(_ uiView: UIPickerView, context: Context) {
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    class Coordinator: NSObject, UIPickerViewDataSource, UIPickerViewDelegate {
        
        let parent: MultiComponentsPicker
        
        init(_ parent: MultiComponentsPicker) {
            self.parent = parent
        }
        
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 6
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            if component == 0 {
                return 24
            }
            
            else if component == 1 {
                return 1
            }
            
            else if component == 2 {
                return 60
            }
            
            else if component == 3 {
                return 1
            }
            
            else if component == 4 {
                return 60
            }
            
            else if component == 5 {
                return 1
            }
            
            return 0
        }
        
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            if component == 0 {
                return "\(row)"
            }
            
            else if component == 1 {
                return "Std."
            }
            
            else if component == 2 {
                return "\(row)"
            }
            
            else if component == 3 {
                return "Min."
            }
            
            else if component == 4 {
                return "\(row)"
            }
            
            else if component == 5 {
                return "Sek."
            }
            
            
            return ""
        }
        
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            if component == 0 {
                parent.hours = Int(row.description)!
            }
            
            else if component == 2 {
                parent.minutes = Int(row.description)!
            }
            
            else if component == 4 {
                parent.seconds = Int(row.description)!
            }
        }
    }
}

這就是它的樣子:

在此處輸入圖像描述

在 UIViewRepresentable 中:

    // allows rows to be compressed
    pickerView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    // allows rows to be expanded
    pickerView.setContentHuggingPriority(.defaultLow, for: .horizontal)

在視圖中:

    MultiComponentsPicker(hours: $hours, minutes: $minutes, seconds: $seconds)
        .frame(width: .infinity) // or fixed size

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM