根据PageView教程,我正在用SwiftUI制作一个与UIKit的交互实现。
特别是有这样的守则:
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‘类型的值转换为闭包结果类型'UIHostingController'
有什么解决办法吗?
发布于 2020-06-10 04:36:39
可能最简单的方法就是添加填充
var body: some View {
PageViewController(controllers: viewControllers, currentPage: $currentPage)
.padding() // << here !!
}但是,如果要在AnyView中使用init,则将成员的声明更改为
var viewControllers: [UIHostingController<AnyView>] // << here !!https://stackoverflow.com/questions/62291546
复制相似问题