这个 SwiftUI 应用程序(Xcode 12.5.1)由一个
不幸的是,布局不能正确地显示。正如你所看到的,“更长的文本”被不必要地截断了。但一旦菜单标题被点击并且菜单短暂出现,标题就会增长到其正确的(未截断)大小,问题就消失了: 这是代码:
相比之下,用
这只是 SwiftUI 布局的一个 bug 吗?无论如何,你能想到解决方法吗?
Menu
和一个按钮组成。点击按钮可以在“短文本”和“更长的文本”之间切换菜单标题。不幸的是,布局不能正确地显示。正如你所看到的,“更长的文本”被不必要地截断了。但一旦菜单标题被点击并且菜单短暂出现,标题就会增长到其正确的(未截断)大小,问题就消失了: 这是代码:
struct ContentView: View {
@State private var textIsLong = false
var body: some View {
VStack {
Menu {
Text("Menu Item")
} label: {
Text(textIsLong ? "Much Longer Text" : "Short Text")
}
.font(.system(size: 30))
.foregroundColor(Color(UIColor.label))
.lineLimit(1)
Button("Toggle Title", action: { textIsLong.toggle()})
}
}
}
相比之下,用
Text(textIsLong ? "Much Longer Text" : "Short Text")
替换菜单可以消除问题;文本永远不会被截断。这只是 SwiftUI 布局的一个 bug 吗?无论如何,你能想到解决方法吗?
minWidth: 0
-.frame(maxWidth: .infinity)
通常已经足够了。 - aheze.infinity
时,它被强制跨越屏幕的最大宽度。因此,不留任何空间进行框架更新。 - Visal Rajapakse