带列表的SwiftUI自定义导航栏

时间:2019-08-03 13:31:41

标签: uinavigationbar swiftui

我列出了与下面看到的苹果类似的列表,但我真的不喜欢UInavigation栏的外观。理想情况下,我希望将其缩小或隐藏起来,以便可以在其中放置自己的视图。

Apple list view

我试图通过使用以下来自苹果外观api的方法来隐藏它

init() { 
    UINavigationBar.appearance().backgroundColor = .green
    UINavigationBar.appearance().isHidden = true
   }

即使拥有这样的导航栏也比拥有巨型标题更为理想

navigation bar title

但这没有影响,没有人有任何建议或想法,我可以如何自定义此内容以使其更符合我的需求?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作,使其像以前的iOS 13导航栏一样,然后将其删除并始终将其放置在中间的栏上:

 .navigationBarTitle(Text("Landmark"), displayMode: .inline)

答案 1 :(得分:1)

这是我使用swiftUI和一些UINavigationView实现的功能,我相信这些修饰符将在beta之后实现为swiftUI。

enter image description here

我通过调整max关于UINavigationBar外观的想法实现了这一点。 How can the background or the color in the navigation bar be changed?

除此之外,我只是将一个切换切换到NavigationBar标题的视图

var body: some View {
    VStack {
        if displayImg {
            Image("dontstarve")
                .resizable()
                .aspectRatio(contentMode: .fill)
                .edgesIgnoringSafeArea(.all)
        } else {
            Image(systemName: "play")
        }
    }
        .navigationBarTitle(Text("Adjustment"), displayMode: .inline)
        .navigationBarItems(trailing:
            HStack {
                Toggle(isOn: $displayImg) {
                    Text("\(self.displayImg ? "on" : "off")")
                        .foregroundColor(Color.white)
                }
    })
}

下面是唯一不是SwiftUI的代码。我只是将所有这些都放入init()中:

init() {
    UINavigationBar.appearance().tintColor = .systemGray6
    UINavigationBar.appearance().barTintColor = .systemTeal
    UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 25)]
}

是的,请记住将导航栏标题模式设置为内联:

    .navigationBarTitle(Text("Home"), displayMode: .inline)