ios SwiftUI菜单按钮内的子标签

kxkpmulp  于 2023-01-10  发布在  iOS
关注(0)|答案(2)|浏览(132)

我尝试使用SwiftUI创建一个包含主标签和次标签(如照片波纹管)的按钮菜单,因此我将按钮和文本(作为次标签)嵌入到VStack中,但它不起作用。如何在swiftUI中创建此视图?

法典

Menu {
        Section {
            search
        }
        Section {
// The sort button
        Menu  {
            Picker("Sorting options", selection: $sort) {
                ForEach(SortType.allCases, id: \.self) { type in
                    Label("title", systemImage: "chevron.up")
                        .tag(type)
                }
            }
        } label: {
// Here I should embed title and subtitle like the photo but I don't know how.
            Label("Sort By", systemImage: "arrow.up.arrow.down")
        }
        }
    } label: {
        menuLabel
    }
qltillow

qltillow1#

从iOS 15.0开始,您可以使用UIKit实现此目的

var menu = UIMenu()

if #available(iOS 15.0, *) {
   menu = UIMenu(title: "Sort By",
                 subtitle: "Name",
                 children: provideJobSortOptions())
} else {
   menu = UIMenu(title: "Sort By"), children: provideJobSortOptions())
}
xqnpmsa8

xqnpmsa82#

我找到了一个部分的方法来做到这一点,但它是没有字幕文本更小,并在一个foregroundStyle(.secondary)

Picker(selection: $pointsSortType) {
    Button(PointsSortType.date            .displayName) {}.tag(PointsSortType.date            .rawValue)
    Button(PointsSortType.type            .displayName) {}.tag(PointsSortType.type            .rawValue)
    Button(PointsSortType.submissionStatus.displayName) {}.tag(PointsSortType.submissionStatus.rawValue)
    Button(PointsSortType.duration        .displayName) {}.tag(PointsSortType.duration        .rawValue)
} label: {
    Label {
        Text("""
             Sort By
             Manual
             """)
    } icon: {
        Image(systemName: "arrow.up.arrow.down")
    }
}
.pickerStyle(.menu)

在这里,我们使用多行字符串来欺骗它。我试着在一堆Stack中添加多个Text。我甚至尝试用AnyView(erasing:)类型擦除它,但不知何故它仍然更聪明。我甚至尝试插入Text视图并添加Text修饰符,如粗体,但它也覆盖了。
很抱歉中间有空格,但这就是我喜欢的代码格式。

相关问题