为什么当我改变字符串长度时,表格中的TableColumn不会动态调整宽度,且宽度属性被设置为“无穷大”?
我希望Table中的TableColumn能根据字符串的长度动态调整大小;如果字符串的长度超过表格的宽度,就会出现水平滚动条。我把.width属性设为infinity(如手册所述,这应能强制列动态调整大小),但并不起作用。我不明白为什么?
这是我的代码:
import SwiftUI
import Foundation
//identify structure for array and table
struct myItem: Identifiable {
let id = UUID()
let myItemStr: String
}
struct ContentView: View {
//variable for title in the table
@State private var myTableTitleStr: String = "My Items"
//set single selection for table
@State private var selectedItemID: myItem.ID?
//array for filling table
@State private var myItemsArray = [myItem(myItemStr: "Item01"), myItem(myItemStr: "Item02"), myItem(myItemStr: "Item03")]
var body: some View {
VStack {
//myTable
Table(myItemsArray, selection: $selectedItemID) {
TableColumn(myTableTitleStr, value: \.myItemStr)
.width(min: 50, ideal: 350, max: .infinity) //this should set up the row resizes dynamically.
}
//myButton
Button(/*@START_MENU_TOKEN@*/"Button"/*@END_MENU_TOKEN@*/) {
//my long string
let myLongString = "my very very very very very very very very very very very very very very very very very long string"
//set up long string to the first row
myItemsArray[0] = (myItem(myItemStr: myLongString))
}
}
.padding()
.frame(width: 400.0, height: 400.0)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
解决方案
Table 在SwiftUI中并不是这样工作的。
当你设置Table时,SwiftUI会读取你最初定义表格内容(列、宽度、标题)时所用的度量信息来建立表格。随后它不会在运行时更新这些布局值,除非表格被完全重新加载。
如果你有一个只有一列的表格,想要动态调整其宽度,使用一个 List 或 LazyVStack,它们更适合完成这项任务。
如果你有多列但想实现动态调整,你就必须使用AppKit来编写。SwiftUI现在还没有提供实现它的工具。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。