🔭

【SwiftUI】Button内のTextは最後の空白の半分を前に移動させる【バグ?】

2024/10/21に公開

現象を説明してタイトルにしたら意味がわからない感じになってしまいましたが...

環境

Sequoia 15.0.1
Xcode 16.0

コード

等幅と非等幅のどちらでも現象が出ますが、わかりやすいかなと思うのでまずは等幅で行います。スペースの配置を文字でも書いております。

import SwiftUI
struct ContentView: View {
    var body: some View {
        VStack {
            Group {
                Text("前零後零")
                Text(" 前一後一 ")
                Text("  前二後二  ")
                Text("   前三後三   ")
                Text("    前四後四    ")
                Button {
                } label: {
                    Text("前零後零")
                }
                Button {
                } label: {
                    Text(" 前一後一 ")
                }
                Button {
                } label: {
                    Text("  前二後二  ")
                }
                Button {
                } label: {
                    Text("   前三後三   ")
                }
                Button {
                } label: {
                    Text("    前四後四    ")
                }
                Button {
                } label: {
                    Text("前零後零")
                }
                Button {
                } label: {
                    Text(" 前一後零")
                }
                Button {
                } label: {
                    Text("  前二後零")
                }
                Button {
                } label: {
                    Text("   前三後零")
                }
                Button {
                } label: {
                    Text("    前四後零")
                }
                Button {
                } label: {
                    Text("前零後零")
                }
                Button {
                } label: {
                    Text("前零後一 ")
                }
                Button {
                } label: {
                    Text("前零後二  ")
                }
                Button {
                } label: {
                    Text("前零後三   ")
                }
                Button {
                } label: {
                    Text("前零後四    ")
                }
            }
            .font(.system(.body, design: .monospaced))
            .border(.black)
        }
        .padding()
    }
}

結果: 等幅(.monospaced)

シンプルTextの前四後四とButtonの前四後四の全体の幅が同じようになっているので、全体の幅の処理は正常のようです。
Buttonの前零後四がセンターに配置されているので後ろのスペースの半分が前に移動している形になります。

結果: 非等幅

スペースの幅が狭いが、現象は同じ。

行動

Appleに報告しました。

Discussion