SwiftUI/空文字だとTextは領域を完璧に取らないため、Unicodeの空白文字を使う
環境
code:sh
$xcodebuild -version
Xcode 15.0.1
Build version 15A507
スクリーンショットは iOS 17.0.1 上のプレビュー
モチベーション
PRで教えてもらったのでメモ
/icons/hr.icon
左: "", 右: \u{200D}
https://scrapbox.io/files/656966899647f5002472ab0f.pnghttps://scrapbox.io/files/6569669243044e0022b94d9d.png
コード
code:swift
import SwiftUI
struct Item: Identifiable {
let text: String
var id: String { text }
}
struct ContentView: View {
static let items = [
Item(text: "AAAAAA"),
Item(text: ""), // or "\u{200D}"
Item(text: "CCCCCC"),
]
var body: some View {
HStack(alignment: .bottom) {
ForEach(Self.items) { item in
VStack {
Rectangle()
.fill(Color.blue)
.frame(width: 100, height: 100)
Text(item.text)
}
}
}
.padding()
}
}
U+200D
U+200B(ゼロ幅スペース)でも同様に領域を取ってくれた
.background(Color.red) でTextに色を塗ったが、両者とも描画はされていないようだった
左: "", 右: \u{200D}
https://scrapbox.io/files/6569687de167450024550d1d.pnghttps://scrapbox.io/files/65696864f1a5770023d159fc.png
長さ1以上の文字列であればhiddenさせると良さそうだけど、空文字の時はこういう特別な対応を入れる必要がありそう