我如何在NavigationView
中顶部对齐Form
。我有下面的例子,当我从主体中删除NaviagationView
时,Form
是顶部对齐的。使用NavigationView
,我得到了它们之间的间距(添加了红色框来显示间距)。我可以在窗体上使用.padding(.top, -20)
,但当它工作时,它会稍微扭曲东西。
NavigationView {
Form {
VStack {
HStack {
Text("Name:").underline().font(.headline)
TextField("Name", text: $routine.name)
}
roundPicker()
TimeSelectionView(stateName: "A", stateDuration: "0:30", stateBackground: "#df405a")
TimeSelectionView(stateName: "B", stateDuration: "1:30", stateBackground: "#4ea1d3")
TimeSelectionView(stateName: "C", stateDuration: "3:00", stateBackground: "#4f953b")
}
}
.navigationBarTitle("Create", displayMode: .inline)
.navigationBarItems(trailing:
Button(action: {
//Save Routine
self.routine.rounds = self.roundsArray[self.rounds]
print("Workout Name: \(self.routine.name)")
print("Workout Rounds: \(self.routine.rounds)")
}, label: {
Text("Save")
}
)
)
}
5条答案
按热度按时间zlwx9yxi1#
SwiftUI
Form
实际上是一个隐藏的分组样式UITableView
,这是默认的tableHeaderView
。所以你可以像这样删除它:iOS 13系统
iOS 14操作系统
苹果正在限制
appearance
黑客攻击,设置tableHeaderView
的框架就是其中之一,所以我们需要通过添加以下步骤来挖掘更多:1.使用约束代替
frame
:2.强制重新加载表:
添加了约束,但需要重载,SwiftUI不允许手动重载列表,所以我们需要添加一个伪视图和伪
state
来欺骗它:注1:
不要硬编码任何数字(比如-35插入!),数字会因设备、平台、状态等的不同而不同。
注2:
.zero
框架不起作用。如果您使用iOS 13的frame
或UIKit
,则应至少传递最小高度。注3:
所有的方法都是hacks,苹果试图限制对底层类型(如
UITableView
)的访问。所以请保持最新状态,并尝试帮助社区。注4:
通过投票和评论为社区做贡献。这样人们会更有动力去挖掘未知的地方,给我们带来很酷的东西。
注解5:
由于我们使用的是外观代理,任何更改都将应用于应用中的所有
TableView
。您可以存储原始Appearance
的状态-〉应用新样式onAppear
,并在需要时恢复原始onDisaper
。fjaof16o2#
设置表头视图在Xcode 12中对我来说已经不起作用了,相反,设置一个负的顶部内容插入似乎也能达到同样的效果。
ecr0jaav3#
如果您使用Introspect,请将其添加到NavigationView中
tcbh2hod4#
这同样适用:
它也适用于
List
。但有时它会影响一个大的导航栏标题,在那里它显示为内联,就像你滚动一样。vvppvyoh5#
清除程序将导航栏标题添加到窗体节,然后设置为隐藏