SwiftUI Button Text width violates borders,没有被HStack压缩

SwiftUI Button Text width violates borders, not compressed by HStack

我有一个带有文本和按钮的小型 HStack。这受限于 maxWidth: 200

import SwiftUI

struct ContentView: View {
    var body: some View {
        HStack {
            Text("Some Text")
                .frame(maxWidth: .infinity)
            Button(action: {}, label: {
                Text("A Very much to long button Text with more Text")
                    .truncationMode(.middle)
            })
        }.frame(maxWidth: 200)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这最终会缩放按钮甚至超出 HStack 的边界。

我不想在按钮标签文本上使用 .frame(maxWidth: 50 硬编码宽度。 在截断文本 (.truncationMode)

之后,它应该尽可能多地使用 space

如果不使用 GeometryReader 如何做到这一点 以便结果看起来像:

更新

根据建议,XCode 在 macOS 11.6

上检查了最新的 13.2

似乎与 macOS 的已知问题有关。

唯一的解决办法是,创建自定义 ButtonStyle 并在那里应用必要的限制:

struct MacOSFixedButtonStyle: ButtonStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .truncationMode(.middle)
            .lineLimit(1)
    }
}

extension View {
    func fixedMacOSButton(
    ) -> some View {
        self.buttonStyle(
            MacOSFixedButtonStyle()
        )
    }
}

通过以下方式应用:

Button("to long to read it and to put it in a view", action: {})
.fixedMacOSButton()