はじめに
iOS16からlineLimit
に新たな引数が指定できるようになりました。
reservesSpace
です。
reservesSpaceで何が変わる?
reservesSpace
にtrue
を指定すると想定される行数分のスペースを確保してくれます。
今回でいうと3行に満たないTextでも3行分のスペースを用意してくれているのがわかります。
一方、reservesSpace
にfalse
を指定している方はTextに行数分のスペースしか与えられていません。
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 30) {
Text("短い文")
.lineLimit(3, reservesSpace: true)
.background(.yellow)
Text("短い文")
.lineLimit(3, reservesSpace: false)
.background(.yellow)
}
.frame(width: 200)
.padding(10)
.background(.red)
}
}
長い文はどちらも変わらない
3行以上の文ではreservesSpace
にどちらを指定しても見た目は変わりません。
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 30) {
Text("短い文\n(reservesSpace: true)")
.lineLimit(3, reservesSpace: true)
.background(.yellow)
Text("短い文\n(reservesSpace: false)")
.lineLimit(3, reservesSpace: false)
.background(.yellow)
Text("長い文\n(reservesSpace: true)\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
.lineLimit(3, reservesSpace: true)
.background(.yellow)
Text("長い文\n(reservesSpace: false)\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
.lineLimit(3, reservesSpace: false)
.background(.yellow)
}
.frame(width: 200)
.padding(10)
.background(.red)
}
}
おわり
こういう細かいところを自分で実装しなくてもいいの助かります。
公式ドキュメント