Swift UI - LPLinkView expanding beyond view once the link is loaded

I am using LinkPresentation Framework for displaying rich links in a List in SwiftUI. On loading the link its getting clipped and moving out of the screen.

Code Block
import SwiftUI
import LinkPresentation
struct ContentView: View {
    @State var redrawPreview = false
    let links: [StringLink]  = [StringLink(id: UUID(), string: "https://www.youtube.com/watch?v=HXoVSbwWUIk"),
                                 StringLink(id: UUID(), string: "https://www.youtube.com/watch?v=F2ojC6TNwws"),
                                 StringLink(id: UUID(), string: "https://www.youtube.com/watch?v=bz6GTYaIQXU")]
    var body: some View {
        List(links) { l in
            HStack {
                Image(systemName: "person.fill")
                    .resizable()
                    .scaledToFit()
                    .frame(width: 40.0, height: 40.0)
                LinkRow(previewURL: URL(string: l.string)!, redraw: self.$redrawPreview)
            }
        }.environment(\.defaultMinListRowHeight, 50)
    }
}
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 = "Custom title"
                view.metadata = md
                view.sizeToFit()
                self.redraw.toggle()
            }
        }
        
        return view
    }
    
    func updateUIView(_ view: LPLinkView, context: Context) {
 
    }
}
struct StringLink : Identifiable{
    var id = UUID()
    var string : String
}


I'm having the same problem, and please share any fix if you found one.

Starting from iOS 16, the UIViewRepresentable protocol has a new API sizeThatFits(_:uiView:context:) that lets us provide custom sizing logic for wrapped UIViews in SwiftUI apps.

SwiftUI calls this method at each layout pass, ensuring it always uses the latest content size.

import SwiftUI
import LinkPresentation

struct LinkPreview: UIViewRepresentable {
    let url: URL
    
    func makeUIView(context: Context) -> LPLinkView {
        let preview = LPLinkView(url: url)
        // start fetching metadata
        LPMetadataProvider()
            .startFetchingMetadata(for: url) { metadata, error in
                guard let metadata, error == nil else { return }
                DispatchQueue.main.async {
                    preview.metadata = metadata
                    preview.sizeToFit()
                }
            }
        return preview
    }
    
    // Not needed
    func updateUIView(_ uiView: LPLinkView, context: Context) {}
    
    // iOS 16+ only
    func sizeThatFits(_ proposal: ProposedViewSize, uiView: LPLinkView, context: Context) -> CGSize? {
        // Use the proposed width (or fallback to its default width)
        let width = proposal.width ?? uiView.intrinsicContentSize.width
        // Ask the link view how tall it needs to be for that width
        let bestFit = uiView.sizeThatFits(
            CGSize(width: width, height: .greatestFiniteMagnitude) // For available frame size
        )
        // Return new size
        return CGSize(width: width, height: bestFit.height)
    }
}
Swift UI - LPLinkView expanding beyond view once the link is loaded
 
 
Q