包含在菜单中的 SwiftUI 视图不会调整大小
SwiftUI View wrapped up in Menu doesn't resize
我想在菜单中使用视图,我的视图有 @State
属性,但我遇到了包含在菜单中的视图无法调整大小的问题。我检查了文档,没有发现任何可以影响菜单内视图大小的内容。有人可以描述一下为什么 Menu 有这种行为以及如何解决这个问题吗?
import SwiftUI
struct MenuView: View {
@State var greeting: Greetings = .short
enum Greetings: String, Identifiable, CaseIterable {
case short = "Hi"
case medium = "Hello"
case long = "Nice to see you"
var id: String { self.rawValue }
}
var body: some View {
VStack(spacing: 20) {
Picker("Options", selection: $greeting) {
ForEach(Greetings.allCases) { greeting in
Text(greeting.rawValue).tag(greeting)
}
}
.pickerStyle(.segmented)
Text("Greeting wrapped in menu:")
Menu {
Button("Send to Someone", action: {})
Button("Save as PDF", action: {})
} label: {
Label(greeting.rawValue, systemImage: "doc.fill")
.labelStyle(.titleOnly)
}
Text("Greeting without menu:")
Text(greeting.rawValue)
}
}
}
我假设您的意思是菜单标签中的文本不会增大或缩小,具体取决于您在选择器中所做的选择。
这是因为正在设置标签的大小,但没有更改。如果您同意,在 Label 的框架上设置 maxWidth
或 .infinity
即可实现此功能。
Label(greeting.rawValue, systemImage: "doc.fill")
.labelStyle(.titleOnly)
.frame(maxWidth: .infinity) <<-- This here
我想在菜单中使用视图,我的视图有 @State
属性,但我遇到了包含在菜单中的视图无法调整大小的问题。我检查了文档,没有发现任何可以影响菜单内视图大小的内容。有人可以描述一下为什么 Menu 有这种行为以及如何解决这个问题吗?
import SwiftUI
struct MenuView: View {
@State var greeting: Greetings = .short
enum Greetings: String, Identifiable, CaseIterable {
case short = "Hi"
case medium = "Hello"
case long = "Nice to see you"
var id: String { self.rawValue }
}
var body: some View {
VStack(spacing: 20) {
Picker("Options", selection: $greeting) {
ForEach(Greetings.allCases) { greeting in
Text(greeting.rawValue).tag(greeting)
}
}
.pickerStyle(.segmented)
Text("Greeting wrapped in menu:")
Menu {
Button("Send to Someone", action: {})
Button("Save as PDF", action: {})
} label: {
Label(greeting.rawValue, systemImage: "doc.fill")
.labelStyle(.titleOnly)
}
Text("Greeting without menu:")
Text(greeting.rawValue)
}
}
}
我假设您的意思是菜单标签中的文本不会增大或缩小,具体取决于您在选择器中所做的选择。
这是因为正在设置标签的大小,但没有更改。如果您同意,在 Label 的框架上设置 maxWidth
或 .infinity
即可实现此功能。
Label(greeting.rawValue, systemImage: "doc.fill")
.labelStyle(.titleOnly)
.frame(maxWidth: .infinity) <<-- This here