😎
[SwiftUI]Textの末尾に出る三点リーダーの"…"を消す
これはなに?
Textに表示される末尾の3点リーダー(…)を消す方法について記載します。
これに地味にハマりました...
サンプルコードも置いておきます。
検証環境
Xcode12.0
素朴な例
例えば、テキストの幅と高さの描画できる範囲を固定して描画したい場合に以下のようなコードを書いたとします。
struct RemoveThreePointLeaderPlayground: View {
var body: some View {
Text("Hello, World!")
.colorInvert()
.frame(width: 70, height: 20)
.background(Color.red)
}
}
その場合、Textの文字が収まりきらなければ"…"で省略されることになります。
これを消していきます。
手順
Textを親Viewより広げる
fixedSize(horizontal:vertical:)
を使うことで親Viewのレイアウトに関係なく、子Viewのレイアウトが固定されます。
struct RemoveThreePointLeaderPlayground: View {
var body: some View {
Text("Hello, World!")
.fixedSize(horizontal: false, vertical: true)
.colorInvert()
.frame(width: 70, height: 20)
.background(Color.red)
}
}
これにより、親Viewの大きさに関わらず改行されます。
なので省略時にでる三点リーダーが描画されなくなります。
表示は以下のようになります。
Textの位置が中央にいるのでまだもう一手間必要そうです。
親Viewのtopに位置を合わせる
親Viewの中央にText
が配置されているので、親Viewの上辺に基準を変えます。
基準の変更はframe(width:height:alignment:)
のalinment
の指定でできます。
alignment
はViewが入っているframe内での配置基準を設定できるパラメータのようです。
struct RemoveThreePointLeaderPlayground: View {
var body: some View {
Text("Hello, World!")
.fixedSize(horizontal: false, vertical: true)
.colorInvert()
.frame(width: 70, height: 20, alignment: .top)
.background(Color.red)
}
}
Text
とbody
の基準をtopで合わせられたので、描画されないテキストが親View外に消えて3点リーダーがなくなりました 👏
(別のalignmentを指定して位置合わせようとしていたので結構ハマりました...)
参考にした記事
以下の記事を参考にさせていただきました。🙇♀️
Discussion
横幅指定するならfixedSizeのhorizontalをtrueにして、alignmentをleadingにしてもいけそう。
ただ、中央よせできなくなる。
中央寄せはViewでテキストをラップすれば解決できるかも