LinkPresentation - Restrict LPLinkView from taking up the entire screen

Viewed 399

I want to control the frame in which the LPLinkView is rendered. I have tried setting the frame explicitly but looks like LPLinkView doesnot respect it.

The only way I have seen any success to control the space taken up by LPLinkView is to wrap LinkRow inside a ScrollView, but that is not what I intend to do.

Here is the code snippet

import SwiftUI
import LinkPresentation

struct ContentView: View {
    @State var redrawPreview = false

    var body: some View {
        VStack {
            LinkRow(previewURL: URL(string: "https://en.wikipedia.org/wiki/Kingfisher")!, redraw: self.$redrawPreview)

            .frame(minWidth: 0, maxWidth: 100, minHeight: 0, maxHeight: 100)
        }
        .padding(.leading, 10)
        .padding(.trailing, 10)
        .background(Color.red)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct LinkRow : UIViewRepresentable {    
    var previewURL:URL    
    @Binding var redraw: Bool

    func makeUIView(context: Context) -> LPLinkView {
        let view = LPLinkView(url: previewURL)
        let provider = LPMetadataProvider()

        provider.startFetchingMetadata(for: previewURL) { (metadata, error) in
            if let md = metadata {
                DispatchQueue.main.async {
                    view.metadata = md
                    view.sizeToFit()
                    self.redraw.toggle()
                }
            }
            else if error != nil
            {
                let md = LPLinkMetadata()
                md.title = "Error"
                view.metadata = md
                view.sizeToFit()
                self.redraw.toggle()
            }
        }
        return view
    }

    func updateUIView(_ view: LPLinkView, context: Context) {
    }
}

0 Answers
Related