В SwiftUI, как бы я сделал функцию, которая добавляет элемент в ScrollView? - PullRequest
0 голосов
/ 14 января 2020
@_cdecl
func AddItemToScrollView(TheString:UnsafePointer<Int8>) -> Void {
    //How would I go about doing something like this
}

import SwiftUI
struct Example: View {
    var body: some View {
        ScrollView {
            //...
        }
    }.onAppear () {
        FunctionThatWouldCallAddItemToScrollViewABazillionTimes()
    }
}

Вы понимаете, что я пытаюсь сделать. Я хочу, чтобы внешний файл определял, когда элементы добавляются в виде текста в ScrollView. Как бы я go об этом? Так что да. Моя цель - иметь ScrollView, и элементы добавляются внешним файлом C, вызывающим функцию. Не беспокойтесь о TheString, для начала я хочу функцию, которая добавит просто «Hello, World!» текст к просмотру прокрутки каждый раз, когда он вызывается. Я могу выяснить остальное оттуда, так что все, что мне нужно, это помощь в том, как go сделать это.

Как мне поступить?

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Если вы хотите добавить то же представление (возможно, с незначительными изменениями), вы можете использовать представление ForEach с переменной состояния:

@State private var viewCount: Int = 0

var body: some View {
    ScrollView {
        ForEach(0..<viewCount) { index in
            YourView() //maybe 'index' or '$index' is an input parameter.
        }
    }
}

, тогда вы реализуете способ увеличения viewCount. Хотя если YourView реализован без SwiftUI, он должен быть заключен в UIViewRepresentable -образующее представление.

0 голосов
/ 14 января 2020

Вы можете использовать эту Gist для добавления Subviews, используя ScrollView in SwiftUI

import SwiftUI
struct UIScrollViewWrapper<Content: View>: UIViewControllerRepresentable {
var content: () -> Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
    }
func makeUIViewController(context: Context) -> UIScrollViewViewController {
let vc = UIScrollViewViewController()
        vc.hostingController.rootView = AnyView(self.content())
return vc
    }
func updateUIViewController(_ viewController: UIScrollViewViewController, context: Context) {
        viewController.hostingController.rootView = AnyView(self.content())
    }
}
class UIScrollViewViewController: UIViewController {
lazy var scrollView: UIScrollView = {
let v = UIScrollView()
        v.isPagingEnabled = true
return v
    }()
var hostingController: UIHostingController<AnyView> = UIHostingController(rootView: AnyView(EmptyView()))
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.scrollView)
self.pinEdges(of: self.scrollView, to: self.view)
self.hostingController.willMove(toParent: self)
self.scrollView.addSubview(self.hostingController.view)
self.pinEdges(of: self.hostingController.view, to: self.scrollView)
self.hostingController.didMove(toParent: self)
    }
func pinEdges(of viewA: UIView, to viewB: UIView) {
        viewA.translatesAutoresizingMaskIntoConstraints = false
        viewB.addConstraints([
            viewA.leadingAnchor.constraint(equalTo: viewB.leadingAnchor),
            viewA.trailingAnchor.constraint(equalTo: viewB.trailingAnchor),
            viewA.topAnchor.constraint(equalTo: viewB.topAnchor),
            viewA.bottomAnchor.constraint(equalTo: viewB.bottomAnchor),
        ])
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...