79743496

Date: 2025-08-22 14:13:47
Score: 0.5
Natty:
Report link

This help me

I had uikit scrollView and inside it swiftuiView

iOS 16+

hostingController.sizingOptions = [.intrinsicContentSize]

Other
ParentViewController:

public override func viewDidLoad() {
        super.viewDidLoad()
        ...
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.delegate = self
        view.addSubview(scrollView)
        
        ...
        
        let mainVC = AutoLayoutHostingController(rootView: MainView(viewModel: viewModel))
        addChild(mainVC) /// Important
        guard let childView = mainVC.view else { return }
        childView.backgroundColor = .clear
        childView.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview(childView)
        mainVC.didMove(toParent: self) /// Important

        childView.setContentHuggingPriority(.required, for: .vertical)
        childView.setContentCompressionResistancePriority(.required, for: .vertical)

        NSLayoutConstraint.activate([
            ....

            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            scrollView.topAnchor.constraint(equalTo: view.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),

            childView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 28),
            childView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 16),
            childView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: -20),
            childView.widthAnchor.constraint(equalTo: scrollView.widthAnchor, constant: -56),

            ....
        ])
    }
// MARK: - AutoLayoutHostingController

public final class AutoLayoutHostingController<OriginalContent: View>: UIHostingController<AnyView> {
    
    // MARK: - Initializers
    
    public init(rootView: OriginalContent, onChangeHeight: ((CGFloat) -> Void)? = nil) {
        super.init(rootView: AnyView(rootView))
        self.rootView = rootView
            .background(
                SizeObserver { [weak self] height in
                    onChangeHeight?(height)
                    self?.view.invalidateIntrinsicContentSize()
                }
            )
            .eraseToAnyView()
    }
    
    @available(*, unavailable)
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
Reasons:
  • Blacklisted phrase (1): help me
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (1):
Posted by: Gleb Kovalenko