文本没有被包裹在 swift UI 中
The text doesn't get wrapped in swift UI
即使在设置 .lineLimit(nil)
后文本也不会换行。
var body: some View {
VStack(alignment: .center) {
Text("SwiftUI is a modern way to declare user interfaces for any Apple platform. ")
.font(.title)
.color(.red)
.lineLimit(nil)
Text("Create beautiful, dynamic apps faster than ever before.")
.font(.system(size: 20))
.lineLimit(nil)
}.padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
}
看起来 font
包含换行属性。
如果将其更改为 body
,则它会正确换行!
尝试将第二个文本的 lineLimit
更改为数字而不是零:
VStack(alignment: .leading) {
Text("SwiftUI is a modern way to declare user interfaces for any Apple platform. ")
.font(.title)
.color(.red)
.lineLimit(nil)
Text("Create beautiful, dynamic apps faster than ever before.")
.font(.system(size: 20))
.lineLimit(2)
}.padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
结果:
SwiftUI
.lineLimit(nil) VS .lineLimit(any number)
VStack(alignment: .leading, spacing: 16.0) {
// Sets the maximum number of lines that text can occupy in the view.
Text("SwiftUI is a user interface toolkit that lets us design apps in a declarative way. ")
.font(.title)
.lineLimit(3)
// But if you don't know about the the text size then Sets nil in the lineLimit.
Text("SwiftUI is a user interface toolkit that lets us design apps in a declarative way. That's a fancy way of saying that we tell SwiftUI how we want our UI to look and work, and it figures out how to make that happen as the user interacts with it.... ")
.font(.body)
.lineLimit(nil)
}.padding(EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8))
在花了很多时间处理这样的错误之后,我不能 100% 确定这是一个 lineLimit 问题。在撰写本文时 post,我发现针对更复杂视图的解决方案是使用以下代码片段来防止换行:
.fixedSize(horizontal: false, vertical: true)
这应该可以防止解释器垂直折叠文本。
我希望这对某人有所帮助。
我遇到了一个涉及 UIViewRepresentable
包裹 UITextField
的情况,显示为:
VStack {
Text("Long enough to wrap....")
Spacer().frame(height: 40)
CustomTextField()
}
当我添加 CustomTextField
时,Text
停止换行。我对 Text
所做的一切都没有帮助。如果我删除 Spacer()
它包裹得很好!!
我最后删除了 Spacer
并向 Text
添加了底部填充。据我所知,我的 CustomTextField
很好,我不明白为什么它会影响 SwiftUI 布局算法。
Xcode 11.3 / Swift 5.1 的完整解决方案可在此处的多个答案中找到。
在 中找到了为什么会发生这种情况的解释:使用预定义的 .font(.title)
、.font(.headline)
等似乎带来了这些 Text
的行为视图将调整自己的大小以始终椭圆而不是环绕。但是,简单地切换到 .body
似乎并不是最好的解决方法。
最好的解决方法是在 中找到:将 .fixedSize(horizontal: false, vertical: true)
添加到您的 Text
视图。这告诉 Text
视图不要执行其自定义调整大小的水平逻辑 NOT ellipsizing 导致它遵循我们都习惯的标准规则。
感谢他们!
对于我的问题,我有这样的设置:
public var body: some View {
Form {
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
.font(.title)
Spacer()
.fixedSize()
Text("""
Integer ut orci odio. Proin cursus ut elit eget rutrum. Nunc ante sem, euismod sed purus sed, tempus elementum elit. Phasellus lobortis at arcu quis porta. Cras accumsan leo eu tempus molestie. Suspendisse vulputate diam ipsum, et tristique lorem porta et. Pellentesque sodales est id arcu luctus venenatis.
Vestibulum non magna lorem. In tincidunt aliquet nunc, sit amet pharetra neque hendrerit id.
Cras sed!
""")
NativeButton("OK", keyEquivalent: .return) { self.screen = .game }
}
.frame(maxWidth: 480)
.fixedSize()
.padding()
}
出于某种原因,我所要做的就是将 minWidth: 480, idealWidth: 480
添加到框架中,一切都正确呈现。没想到,因为我已经申请了.fixedSize()
,所以我想这三个中的一个就够了。
public var body: some View {
Form {
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
.font(.title)
Spacer()
.fixedSize()
Text("""
Integer ut orci odio. Proin cursus ut elit eget rutrum. Nunc ante sem, euismod sed purus sed, tempus elementum elit. Phasellus lobortis at arcu quis porta. Cras accumsan leo eu tempus molestie. Suspendisse vulputate diam ipsum, et tristique lorem porta et. Pellentesque sodales est id arcu luctus venenatis.
Vestibulum non magna lorem. In tincidunt aliquet nunc, sit amet pharetra neque hendrerit id.
Cras sed!
""")
NativeButton("OK", keyEquivalent: .return) { self.screen = .game }
}
.frame(minWidth: 480, idealWidth: 480, maxWidth: 480)
.fixedSize()
.padding()
}
我刚刚添加
.padding()
到我的 Text
实例并且它有效
即使在设置 .lineLimit(nil)
后文本也不会换行。
var body: some View {
VStack(alignment: .center) {
Text("SwiftUI is a modern way to declare user interfaces for any Apple platform. ")
.font(.title)
.color(.red)
.lineLimit(nil)
Text("Create beautiful, dynamic apps faster than ever before.")
.font(.system(size: 20))
.lineLimit(nil)
}.padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
}
看起来 font
包含换行属性。
如果将其更改为 body
,则它会正确换行!
尝试将第二个文本的 lineLimit
更改为数字而不是零:
VStack(alignment: .leading) {
Text("SwiftUI is a modern way to declare user interfaces for any Apple platform. ")
.font(.title)
.color(.red)
.lineLimit(nil)
Text("Create beautiful, dynamic apps faster than ever before.")
.font(.system(size: 20))
.lineLimit(2)
}.padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
结果:
SwiftUI
.lineLimit(nil) VS .lineLimit(any number)
VStack(alignment: .leading, spacing: 16.0) {
// Sets the maximum number of lines that text can occupy in the view.
Text("SwiftUI is a user interface toolkit that lets us design apps in a declarative way. ")
.font(.title)
.lineLimit(3)
// But if you don't know about the the text size then Sets nil in the lineLimit.
Text("SwiftUI is a user interface toolkit that lets us design apps in a declarative way. That's a fancy way of saying that we tell SwiftUI how we want our UI to look and work, and it figures out how to make that happen as the user interacts with it.... ")
.font(.body)
.lineLimit(nil)
}.padding(EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8))
在花了很多时间处理这样的错误之后,我不能 100% 确定这是一个 lineLimit 问题。在撰写本文时 post,我发现针对更复杂视图的解决方案是使用以下代码片段来防止换行:
.fixedSize(horizontal: false, vertical: true)
这应该可以防止解释器垂直折叠文本。
我希望这对某人有所帮助。
我遇到了一个涉及 UIViewRepresentable
包裹 UITextField
的情况,显示为:
VStack {
Text("Long enough to wrap....")
Spacer().frame(height: 40)
CustomTextField()
}
当我添加 CustomTextField
时,Text
停止换行。我对 Text
所做的一切都没有帮助。如果我删除 Spacer()
它包裹得很好!!
我最后删除了 Spacer
并向 Text
添加了底部填充。据我所知,我的 CustomTextField
很好,我不明白为什么它会影响 SwiftUI 布局算法。
Xcode 11.3 / Swift 5.1 的完整解决方案可在此处的多个答案中找到。
在 .font(.title)
、.font(.headline)
等似乎带来了这些 Text
的行为视图将调整自己的大小以始终椭圆而不是环绕。但是,简单地切换到 .body
似乎并不是最好的解决方法。
最好的解决方法是在 .fixedSize(horizontal: false, vertical: true)
添加到您的 Text
视图。这告诉 Text
视图不要执行其自定义调整大小的水平逻辑 NOT ellipsizing 导致它遵循我们都习惯的标准规则。
感谢他们!
对于我的问题,我有这样的设置:
public var body: some View {
Form {
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
.font(.title)
Spacer()
.fixedSize()
Text("""
Integer ut orci odio. Proin cursus ut elit eget rutrum. Nunc ante sem, euismod sed purus sed, tempus elementum elit. Phasellus lobortis at arcu quis porta. Cras accumsan leo eu tempus molestie. Suspendisse vulputate diam ipsum, et tristique lorem porta et. Pellentesque sodales est id arcu luctus venenatis.
Vestibulum non magna lorem. In tincidunt aliquet nunc, sit amet pharetra neque hendrerit id.
Cras sed!
""")
NativeButton("OK", keyEquivalent: .return) { self.screen = .game }
}
.frame(maxWidth: 480)
.fixedSize()
.padding()
}
出于某种原因,我所要做的就是将 minWidth: 480, idealWidth: 480
添加到框架中,一切都正确呈现。没想到,因为我已经申请了.fixedSize()
,所以我想这三个中的一个就够了。
public var body: some View {
Form {
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
.font(.title)
Spacer()
.fixedSize()
Text("""
Integer ut orci odio. Proin cursus ut elit eget rutrum. Nunc ante sem, euismod sed purus sed, tempus elementum elit. Phasellus lobortis at arcu quis porta. Cras accumsan leo eu tempus molestie. Suspendisse vulputate diam ipsum, et tristique lorem porta et. Pellentesque sodales est id arcu luctus venenatis.
Vestibulum non magna lorem. In tincidunt aliquet nunc, sit amet pharetra neque hendrerit id.
Cras sed!
""")
NativeButton("OK", keyEquivalent: .return) { self.screen = .game }
}
.frame(minWidth: 480, idealWidth: 480, maxWidth: 480)
.fixedSize()
.padding()
}
我刚刚添加
.padding()
到我的 Text
实例并且它有效