検証環境: iOS 17.2 + Xcode 15.2
Text
に対してlineLimit(_:reservesSpace: true)
とlineSpacing
を同時に使ったときのバグがある。
reserve
された空白行にはlineSpacing
が適用されず、高さが揃わないのである。
これに対するワークアラウンドとして、非常に単純であるが以下のようなものが考えられる。
import SwiftUI
public struct SpaceReservingMultilineText: View {
var text: String
var lineLimit: Int
var lineSpacing: CGFloat
public var body: some View {
ZStack(alignment: .top) {
Text((0..<lineLimit - 1).map { _ in "\n" }.joined())
.opacity(0)
Text(text)
.lineLimit(lineLimit, reservesSpace: true)
}
.lineSpacing(lineSpacing)
}
}
使うときは以下のように属性を外からまとめて指定することができる。
SpaceReservingMultilineText(text: ..., lineLimit: 3)
.font(...)
.foregroundColor(...)
もちろん将来的に修正されたら以下のように書けるはずなので、気長に待とう。
Text(text)
.font(...)
.foregroundColor(...)
.lineLimit(3, reservesSpace: true)
.lineSpacing(5)