下面是一个View
的大小:
struct SizeKey : PreferenceKey
{
static var defaultValue: CGSize = .zero
static func reduce(value _: inout CGSize, nextValue _: () -> CGSize) {}
}
extension View
{
func peekSize(_ size: Binding<CGSize>) -> some View
{
background <=== ERROR
{
GeometryReader
{ geometry in
Color.clear
.preference(key: SizeKey.self, value: geometry.size)
}
}
.onPreferenceChange(SizeKey.self)
{ value in
size.wrappedValue = value
}
}
}
它是这样使用的:
@State var textSize = CGSize.zero
...
ScrollView
{
Text("The quick brown fox jumped over the lazy dog. How vexingly quick daft zebras jump! Pack my box with five dozen liquor jugs. ...")
.peekSize($textSize)
}
.frame(maxHeight: textSize.height)
在iOS 15+上一切都很好。但是现在我需要支持iOS 14,这导致错误background(alignment:content:) is only available in iOS 15.0 or newer
。
你愿意看一看并分享如何解决这个问题吗?
1条答案
按热度按时间2guxujil1#
您应该能够使用
background
修饰符,它直接接受View
,而不是@ViewBuilder
闭包。这在iOS 17中已弃用,但在iOS 14中并未弃用。