[英]How to make SwiftUI Picker Wrap Text
一個解決方案看起來有點復雜,因為 Picker 不是原生的 SwiftUI 控件,而是在后端有UIPickerView
,所以我們需要結合已經提到的一個來擺脫壓縮包含和另一個來計算最長標簽並顯式壓縮選取器。
主要部分是
@State private var maxWidth = CGFloat.zero
@State private var width = CGFloat.infinity
var body: some View {
Picker("", selection: $selection) {
ForEach( ...
// Row/Label view is here
.background(GeometryReader {
Color.clear.preference(key: ViewWidthKey.self,
value: $0.frame(in: .local).size.width)
})
.onPreferenceChange(ViewWidthKey.self) {
self.maxWidth = max($0, maxWidth)
width = max($0, maxWidth)
}
}
}
.pickerStyle(.wheel)
.frame(maxWidth: width + 2 * 20 /* padding on both sides */)
}
使用 Xcode 13.4 / iOS 15.5 測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.