[英]How to change Width in a UITextField with UIViewRepresentable in SwiftUI?
[英]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.