SwiftUI连接文本和文本对齐方式

xoshrz7s  于 2023-03-16  发布在  Swift
关注(0)|答案(3)|浏览(185)

我尝试连接两个字符串,然后使最终结果居中对齐。问题似乎是两个Text()视图与+组合不再创建Text()类型。尝试应用任何.multiLineTextAlignment或仅应用Alignment会出现错误
无法将some View类型的值转换为预期的参数类型Text
下面是一个例子:

Text(myText ?? "")
    .font(Font(myFont))
    .kerning(spacing)
    .foregroundColor(Color(textColor))
//.multilineTextAlignment(.center) - throws error
+ Text(text2 ?? "")
    .font(Font(myFont))
    .foregroundColor(Color(textColor))
    .baselineOffset(6)
    .kerning(spacing)
wixjitnu

wixjitnu1#

当一个人使用.multiLineTextAlignment时,你不能连接Text(),这是绝对正确的。
从理论上讲,你所写的内容将创建一个文本视图,该视图在到达特定行之前换行,然后不再换行。这在SwiftUI中不受支持,需要自定义构建。所有连接的文本视图通常需要遵循相同的对齐规则。
但是,如果您想对所有连接的文本视图应用相同的对齐规则,您可以轻松地将它们 Package 在Group()中,如下所示:

Group {
    Text(myText ?? "")
        .font(Font(myFont))
        .kerning(spacing)
        .foregroundColor(Color(textColor))
    + Text(text2 ?? "")
        .font(Font(myFont))
        .foregroundColor(Color(textColor))
        .baselineOffset(6)
        .kerning(spacing)
}
.multilineTextAlignment(.center)
sg3maiej

sg3maiej2#

如果你想让文本水平居中,不要使用+操作符。如果你的文本有相同的样式,插入字符串,如下所示:Text("\(myText ?? "")\(text2 ?? "")")。否则,尝试使用HStack并将其置于父视图的中心。您可以调整HStack的spacing属性,使其看起来更自然。

HStack(spacing: 1) {
    Text(myText ?? "")
        .font(Font(myFont))
        .kerning(spacing)
        .foregroundColor(Color(textColor))
    Text(text2 ?? "")
        .font(Font(myFont))
        .foregroundColor(Color(textColor))
        .baselineOffset(6)
        .kerning(spacing)```
}
tv6aics1

tv6aics13#

看起来像是将Text + Text包围在堆栈中,然后将.multiLineText应用到堆栈本身就是解决方案。

相关问题