如何创建自定义工具栏?

huangapple go评论59阅读模式
英文:

How to create a custom toolbar?

问题

我想要一个粘性工具栏,它在 SwiftUI 中的 `List` 上方具有多个不同的过滤选项。是否可以在 `List``.toolbar` 属性中直接放置一个完整的自定义视图?

使用下面的代码,事情看起来非常意外。

```swift
var body: some View {
    NavigationView {
        List() {
            Text("列表项")
        }
        .toolbar {
            ToolbarItem(placement: .navigationBarLeading) {
                VStack {
                    Toggle(isOn: $viewModel.isPound) {
                        Text("测试")
                    }
                    .toggleStyle(.switch)
                    Text("一个控制数据的滑块")
                    Text("另一个过滤选项")
                    Text("一些随机信息")
                }
            }
        }
    }
}

[![SwiftUI 列表工具栏][1]][1]


[![SwiftUI 列表工具栏滚动][2]][2]


  [1]: https://i.stack.imgur.com/hnJWv.png
  [2]: https://i.stack.imgur.com/IPNqd.png
英文:

I want to have a sticky toolbar that has multiple different filtering options above a List in SwiftUI. Is there a way to just place a full custom view inside the .toolbar property of a List?

With the below code, things look very unexpected

var body: some View {
    NavigationView {
        List() {
            Text("List item")
        }
        .toolbar {
            ToolbarItem(placement: .navigationBarLeading) {
                VStack {
                    Toggle(isOn: $viewModel.isPound) {
                        Text("test")
                    }
                    .toggleStyle(.switch)
                    Text("A slider to control data")
                    Text("Another filtering option")
                    Text("Some random piece of information")
                }
            }
        }
    }
}

如何创建自定义工具栏?

如何创建自定义工具栏?

答案1

得分: 0

NavigationBar  iOS 上的固定高度,实际上是为按钮设计的。如果给它添加背景颜色,你会看到问题(以及你可以使用的空间)。

```swift
struct ContentView: View {
    
    @State private var isPound = false
    
    var body: some View {
        NavigationView {
            List() {
                Text("列表项")
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    VStack {
                        Toggle(isOn: $isPound) {
                            Text("测试")
                        }
                        .toggleStyle(.switch)
                        Text("一个控制数据的滑块")
                        Text("另一个过滤选项")
                        Text("一些随机信息")
                    }
                    .border(.red)
                }
            }
            .toolbarBackground(.visible, for: .navigationBar)
            .toolbarBackground(.red, for: .navigationBar)
        }
    }
}
[![在此输入图片描述][1]][1]
英文:

The NavigationBar is a fixed height for iOS, and is really designed for buttons. You can see the problem (and the space you have to work with) if you add a background colour to it.

struct ContentView: View {
    
    @State private var isPound = false
    
    var body: some View {
        NavigationView {
            List() {
                Text("List item")
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    VStack {
                        Toggle(isOn: $isPound) {
                            Text("test")
                        }
                        .toggleStyle(.switch)
                        Text("A slider to control data")
                        Text("Another filtering option")
                        Text("Some random piece of information")
                    }
                    .border(.red)
                }
            }
            .toolbarBackground(.visible, for: .navigationBar)
            .toolbarBackground(.red, for: .navigationBar)
        }
    }
}

如何创建自定义工具栏?

huangapple
  • 本文由 发表于 2023年2月16日 08:08:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/75466612.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定