SwiftUI可编辑导航标题
是否可以使SwiftUI的导航标题可编辑? 不幸的是,SwiftUI可编辑导航标题,swift,swiftui,textfield,navigationbar,navigationview,Swift,Swiftui,Textfield,Navigationbar,Navigationview,是否可以使SwiftUI的导航标题可编辑? 不幸的是,navigationTitle修饰符只接受Text视图,而不接受TextField视图。 我想这样做,而不是仅仅使用导航栏下方的文本字段,因为我仍然希望在用户向下滚动时,在导航栏内联显示修改后的标题,并且导航栏为导航标题分配空间,无论您是否定义了一个。您可以在导航栏中放置自定义视图通过指定一个放置值为.principal的工具栏项,您可以在标题可能出现的位置查看NavigationView,例如在下面的代码中。我添加了RoundedBorde
navigationTitle
修饰符只接受Text
视图,而不接受TextField
视图。
我想这样做,而不是仅仅使用导航栏下方的文本字段,因为我仍然希望在用户向下滚动时,在导航栏内联显示修改后的标题,并且导航栏为导航标题分配空间,无论您是否定义了一个。您可以在导航栏中放置自定义视图通过指定一个放置值为
.principal
的工具栏项,您可以在标题可能出现的位置查看NavigationView,例如在下面的代码中。我添加了RoundedBorderTextFieldStyle
,以使文本字段更加可见:
struct EditableTitleView:视图{
@国家私有var editableTitle:String=“我的标题”
var body:一些观点{
导航视图{
文本(“具有可编辑标题的视图”)
.工具栏{
工具栏项(位置:。主体){
TextField(“Title”,text:$editableTitle)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
}
}
}
请注意,如果您还向视图中添加了一个navigationTitle
修改器,它在iOS上的默认大样式仍将显示在工具栏下方,但如果它从页面上滚动,它将消失,而您的主项将保留在屏幕上。如果设置.navigationBarTitleDisplayMode(.inline)
,则将永远不会显示较大的样式标题
我提到这个是因为你应该考虑保留你的观点的标题,原因有两个:
如果NavigationLink
在堆栈上推送视图,则您希望在“后退”按钮和长按时显示的堆栈视图列表中显示有意义的名称
我还没有检查VoiceOver在没有标题的导航子视图中会发生什么。重写本地行为越多,你就越需要考虑你的应用程序是否比SWIFTUI默认提供的访问更少。
请尝试工具栏主插槽中工具栏项目内部的文本字段。为目标创建一个计算属性,并给它一个可编辑的导航标题
struct TextFieldNavigationTitleView: View {
@State var mainTitle = "Main Menu"
@State var areaOneTitle = "Area One"
var body: some View {
NavigationView {
NavigationLink("App Area One", destination: areaOne)
.toolbar {
ToolbarItem(placement: .principal) {
TextField("Navigation Title", text: $mainTitle)
}
}
}
}
var areaOne : some View {
Text("AREA ONE")
.toolbar {
ToolbarItem(placement: .principal) {
TextField("Area One Title", text: $areaOneTitle)
}
}
}
}