我正在完成一个需要用户数据输入字段的应用程序。我用少量数据元素对其进行建模以简化开发。今天我尝试添加其他元素,但惊讶地发现我只能向一个视图添加 10 个视图。所以我尝试了最简单的设计(如下)。如果我在视图中添加了 11 个“事物”,它会立即在顶部项目上显示错误,无论它是什么:
“传递给不带参数的调用的参数”
我是否将外部容器称为 ScrollView、VStack、List 或 Form 都没有关系。同样的行为。Text/TextField 子单元是否在 VStack 中无关紧要。
所以我回到了基础 - 刚刚添加了十个文本视图。没问题。添加第十一个,它会爆炸。这是其中一种变体 - 但我需要做的就是添加 10 个简单的 Text 视图以使其中断。
我一定在这里遗漏了一些非常基本的东西。我检查了较新版本的 Xcode,但我有最新版本 11.2 beta 2 (11B44)。
@State private var textField1: String = "Pass to the ListCell"
@State private var textField2: String = "2"
//more of these
var body: some View {
NavigationView {
VStack {
//extract the VStack and create a separate struct
ListCell(tfString: textField1)
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField2)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
VStack { …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的struct
,它接受一组视图并返回一个VStack
包含这些视图的普通视图,除了它们都是对角堆叠的。
代码:
struct LeaningTower<Content: View>: View {
var views: [Content]
var body: some View {
VStack {
ForEach(0..<views.count) { index in
self.views[index]
.offset(x: CGFloat(index * 30))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在这很好用,但每当我不得不调用它时,我总是很生气:
LeaningTower(views: [Text("Something 1"), Text("Something 2"), Text("Something 3")])
Run Code Online (Sandbox Code Playgroud)
在这样的数组中列出视图对我来说似乎非常奇怪,所以我想知道是否有一种方法可以像这样@ViewBuilder
调用我的LeaningTower
结构:
LeaningTower { // Same way how you would create a regular VStack
Text("Something 1")
Text("Something 2")
Text("Something 3")
// And then have all of these Text's in my 'views' array
}
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以@ViewBuilder …
我一直在尝试使用Swift UI为iOS 13创建一个应用程序,但我不断收到这个奇怪的错误:“对成员'buildBlock()'的引用不明确”。
无论我做什么,错误都不会消失。
我尝试一次注释部分代码,以查看可能是引起问题的部分,但是唯一起作用的是注释掉整个视图。
我试过清理构建文件夹并删除派生数据。我还尝试过多次重启计算机和Xcode,但没有任何修复措施。
我很确定这只是一个Xcode错误,但是必须解决它,如果有人能告诉我那是什么,我将非常感谢。
var body: some View {
GeometryReader { geometry in {
VStack {
Button (action: self.editProfilePicture) {
Image(ImageNames.AccountIconImageName, bundle: Bundle.main)
.resizable()
.frame(width: geometry.size.width / SizeConstants.AccountIconSizeDiviser, height: geometry.size.width / SizeConstants.AccountIconSizeDiviser)
.padding()
.background(ColorConstants.VeryLightGrayColor)
.clipShape(Circle())
}
.accentColor(.white)
.padding(.bottom, LargePadding)
ScrollView (showsVerticalIndicator: false) {
let const: Length? = geometry.size.width - SizeConstants.FullNameTextFieldWidthReduction
TextBox(textBinding: self.$fullName, placeHolder: Text(Strings.FullNameString), editChanged: self.fullNameChanged)/*.padding(.bottom, SmallPadding)*/.frame(width: const)
TextBox(textBinding: self.$username, placeHolder: Text(Strings.UsernameString), editChanged: self.usernameChanged)//.padding(.bottom)
Text(verbatim: Strings.ChooseIdType).font(.footnote).color(.gray)
TextBox(textBinding: self.$phoneNumber, placeHolder: Text(Strings.PhoneNumberString), editChanged: self.phoneNumberChanged)//.padding(.bottom, SmallPadding)
TextBox(textBinding: self.$emailAddress, placeHolder: Text(Strings.EmailAddressString), …
Run Code Online (Sandbox Code Playgroud)