Ios 快捷文本对齐
在Ios 快捷文本对齐,ios,swift,swiftui,Ios,Swift,Swiftui,在Text视图的许多属性中,我找不到任何与文本对齐相关的属性。我在一个演示中看到,它会自动处理RTL,当使用View的主体放置东西时,它总是自动将其居中 关于SwiftUI中的布局系统,我是否缺少一些概念?如果没有,如何将文本对齐属性设置为text 因此,与其编写类似于文本(“Hello World”).aligned(.leading)的内容,不如采用以下方法: VStack(alignment: .leading) { Text("Hello World") } 可以将垂直stac
Text
视图的许多属性中,我找不到任何与文本对齐相关的属性。我在一个演示中看到,它会自动处理RTL,当使用View的主体
放置东西时,它总是自动将其居中
关于
SwiftUI
中的布局系统,我是否缺少一些概念?如果没有,如何将文本对齐属性设置为text
因此,与其编写类似于文本(“Hello World”).aligned(.leading)
的内容,不如采用以下方法:
VStack(alignment: .leading) {
Text("Hello World")
}
可以将垂直stackView的对齐设置为前导对齐。如下
VStack(alignment: .leading) {
Text("Turtle Rock")
.font(.title)
Text("Joshua Tree National Park")
.font(.subheadline)
}
您可以通过修改器
.multilitextalignment(.center)
执行此操作
从SwiftUI beta 3开始,您可以使用框架修改器将文本视图居中:
Text("Centered")
.frame(maxWidth: .infinity, alignment: .center)
我们需要对齐文本,而不是它所在的堆栈。因此,调用
multilitextalignment(.center)
并设置行限制,我可以看到对齐到中心的文本。我不知道为什么我必须设置行限制,我想如果你有一个大的文本,它会扩展
Text("blahblah")
.font(.headline)
.multilineTextAlignment(.center)
.lineLimit(50)
实际上,我遇到了一个问题,我必须在一行上对齐文本。我发现它的工作原理是:
Text("some text")
.frame(alignment: .leading)
如果将此参数与frame width参数结合使用,则可以为标签等获得一些不错的文本块格式。如果要保持文本的恒定宽度,“.multilineTextAlignment(.leading)”在只有一行文本之前不会起任何作用 这是对我有效的解决方案:
struct LeftAligned: ViewModifier {
func body(content: Content) -> some View {
HStack {
content
Spacer()
}
}
}
extension View {
func leftAligned() -> some View {
return self.modifier(LeftAligned())
}
}
用法:
Text("Hello").leftAligned().frame(width: 300)
我自己也试图理解这一点,因为这里的其他答案提到了
Text.multilitextalignment(:)
/VStack(alignment:)
/frame(width:alignment:)
,但每个解决方案都解决了一个特定的问题。最终,它取决于用户界面需求和这些需求的组合
VStack(对齐:)
此处的对齐
用于内部视图的相对位置。因此,指定
.leading
将关联所有内部视图,使其前导彼此对齐
VStack(alignment: .leading, spacing: 6) {
Text("Lorem ipsum dolor")
.background(Color.gray.opacity(0.2))
Text("sit amet")
.background(Color.gray.opacity(0.2))
}
.background(Color.gray.opacity(0.1))
.frame
在框架(宽度:对齐:)
或框架(最大宽度:对齐:)
中,对齐
用于给定宽度内的内容
VStack(alignment: .leading, spacing: 6) {
Text("Lorem ipsum dolor")
.background(Color.gray.opacity(0.2))
Text("sit amet")
.background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))
内部视图彼此前导对齐,但视图本身尾随对齐,分别与VStack
对齐
.multilitextalignment
这指定了内部文本的对齐方式,并且当有多行没有定义的框架(宽度:对齐)
时,可以看到最好的对齐方式,宽度会自动调整,并受到默认对齐方式的影响
VStack(alignment: .trailing, spacing: 6) {
Text("0. automatic frame\n+ view at parent's specified alignment\n+ multilineTA not set by default at leading")
.background(Color.gray.opacity(0.2))
Text("1. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to center")
.multilineTextAlignment(.center)
.background(Color.gray.opacity(0.2))
Text("2. automatic frame\n+ view at parent's specified alignment\n+ multilineTA set to trailing")
.multilineTextAlignment(.trailing)
.background(Color.gray.opacity(0.2))
}
.frame(width: 380, alignment: .trailing)
.background(Color.gray.opacity(0.1))
组合测试:
我想使用Spacer()
视图来对齐文本块。
此示例在尾端显示文本:
HStack{
Spacer()
Text("Wishlist")
}
不确定这是否是您要寻找的答案,但我已经体验到,对于阿拉伯语等语言,SwiftUI会自动切换到RTL,您不需要在UIKit中明确指定该选项。所以我不能只删除一个独立于堆栈的标签?@inokey我至少找不到用于此的修饰符。我也没有找到。在我看来,我似乎错过了SUI的一些基本概念。我甚至不能将“视图”放在两个对象之间,并给它一个颜色,就像它们没有普通的a-la-ui视图对象一样。框架修改器有一个对齐参数,这看起来很愚蠢(尽管它确实有效)。你们从哪里听说这是被鼓励的?有什么东西可以证明这篇文章的合理性吗?这是一个非常令人信服的答案。非常感谢。我也会考虑把这个问题作为一个被接受的答案。“伊诺基高兴地分享我的观察结果:”后来我发现了一篇有趣的文章,深入地看了一般的观点:令人敬畏的人。自从我最初发布这个问题以来,SwiftUI真的发生了变化。这是最好的解决方案!
HStack{
Spacer()
Text("Wishlist")
}