Resolve:background(alignment:content:)仅在iOS 15.0或更高版本中可用

svujldwt  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(89)

下面是一个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
你愿意看一看并分享如何解决这个问题吗?

2guxujil

2guxujil1#

您应该能够使用background修饰符,它直接接受View,而不是@ViewBuilder闭包。这在iOS 17中已弃用,但在iOS 14中并未弃用。

background( // notice the change to parentheses
    GeometryReader
    { geometry in
        Color.clear
            .preference(key: SizeKey.self, value: geometry.size)
    }
)

相关问题