this gives me dynamic text height correctly
import SwiftUI
struct ContentView : View {
var body: some View {
List {
Text("This is some very long text can we can see scrolls past two lines ").lineLimit(nil)
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
But the following truncates the Text. How do i get dynamic height with the following?
import SwiftUI
struct ContentView : View {
var body: some View {
GeometryReader { reader in
ScrollView {
Text("This is some very long text can we can see scrolls past two lines ")
.lineLimit(nil)
.frame(width: reader.size.width)
}
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
您需要使用fixedSize
修饰符来防止截断。在你的情况下,它就像:
Text("This is some very long text can we can see scrolls past two lines ")
.lineLimit(nil)
.fixedSize(horizontal: false, vertical: true) //** It keeps 'width size' and expands 'height size'
.frame(width: reader.size.width)
Run Code Online (Sandbox Code Playgroud)
import SwiftUI
struct ContentView : View {
let veryLongText = "Very long text..."
let fontName = "System Font"
let fontSize: Length = 12
var body: some View {
GeometryReader { geometry in
ScrollView {
Text(veryLongText)
.lineLimit(nil)
.font(.custom(fontName, size: fontSize))
.frame(width: geometry.size.width, height: veryLongText.textHeightFrom(width: geometry.size.width, fontName: fontName, fontSize: fontSize))
}
}
.padding(.horizontal, 0.5 * fontSize)
}
}
extension String {
func textHeightFrom(width: CGFloat, fontName: String = "System Font", fontSize: CGFloat = .systemFontSize) -> CGFloat {
#if os(macOS)
typealias UXFont = NSFont
let text: NSTextField = .init(string: self)
text.font = NSFont.init(name: fontName, size: fontSize)
#else
typealias UXFont = UIFont
let text: UILabel = .init()
text.text = self
text.numberOfLines = 0
#endif
text.font = UXFont.init(name: fontName, size: fontSize)
text.lineBreakMode = .byWordWrapping
return text.sizeThatFits(CGSize.init(width: width, height: .infinity)).height
}
}
Run Code Online (Sandbox Code Playgroud)
可能是一个ScrollView
错误。老实说,我不确定为什么您的代码不起作用,但您可以使用以下方法获得所需的结果:
struct ContentView : View {
var body: some View {
GeometryReader { reader in
ScrollView(alwaysBounceVertical: true) {
ZStack(alignment: .top) {
Color.clear.edgesIgnoringSafeArea(.all)
Text("This is some very long text can we can see scrolls past two lines ")
.lineLimit(nil)
}.frame(width: reader.size.width, height: reader.size.height)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我添加alwaysBounceVertical
到滚动视图,以便您可以看到视图滚动。但这没有必要。
归档时间: |
|
查看次数: |
6497 次 |
最近记录: |