Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI可编辑导航标题_Swift_Swiftui_Textfield_Navigationbar_Navigationview - Fatal编程技术网

SwiftUI可编辑导航标题

SwiftUI可编辑导航标题,swift,swiftui,textfield,navigationbar,navigationview,Swift,Swiftui,Textfield,Navigationbar,Navigationview,是否可以使SwiftUI的导航标题可编辑? 不幸的是,navigationTitle修饰符只接受Text视图,而不接受TextField视图。 我想这样做,而不是仅仅使用导航栏下方的文本字段,因为我仍然希望在用户向下滚动时,在导航栏内联显示修改后的标题,并且导航栏为导航标题分配空间,无论您是否定义了一个。您可以在导航栏中放置自定义视图通过指定一个放置值为.principal的工具栏项,您可以在标题可能出现的位置查看NavigationView,例如在下面的代码中。我添加了RoundedBorde

是否可以使SwiftUI的导航标题可编辑? 不幸的是,
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)
                    }
                }
        }
    }