我正在根据Interacing with UIKit教程使用SwiftUI进行PageView实现。
尤其是有这样的代码:
struct PageView<Page: View>: View {
var viewControllers: [UIHostingController<Page>]
@State var currentPage = 0
init(_ views: [Page]) {
self.viewControllers = views.map { UIHostingController(rootView: $0) }
}
var body: some View {
PageViewController(controllers: viewControllers, currentPage: $currentPage)
}
}
可以通过一种简单的方式调用视图:
PageView([FirstView(), SecondView()])
我想在页面视图周围添加良好的填充,因此可以通过以下方式调用此视图:
PageView([AnyView(FirstView().padding()), AnyView(SecondView().padding()])
一切都很好,但是我每次都要重复.padding()并包装在调用者方法的AnyView中。但是,当我尝试将此代码移至init方法时,我陷入了错误,无法解决:
init(_ views: [Page]) {
self.viewControllers = views.map { UIHostingController(rootView: AnyView($0.padding())) }
}
报告为无法将类型'UIHostingController
有提示如何解决吗?
答案 0 :(得分:1)
可能最简单的方法是添加填充
var body: some View {
PageViewController(controllers: viewControllers, currentPage: $currentPage)
.padding() // << here !!
}
但是如果您想在AnyView
中创建那些init
,则将成员声明更改为
var viewControllers: [UIHostingController<AnyView>] // << here !!