我在我正在开发的一个应用程序中使用 UIHostingController 并且遇到了问题。嵌入式 SwiftUI 视图会动态更改其高度,但我似乎无法掌握如何在它嵌入的视图中更新它。
问题似乎不在实现中,因为即使是最基本的也有这个问题。
UIView 是这样写的:
var hostingController = UIHostingController(rootView: GrowingView())
override func viewDidLoad() {
super.viewDidLoad()
prepareHostingController()
}
func prepareHostingController() {
view.addSubview(hostingController.view)
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
hostingController.view.topAnchor.constraint(equalTo: view.topAnchor, constant: 100)
])
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
}
SwiftUI 视图是这样的:
struct GrowingView: View {
@State var height: CGFloat = 100
var body: some View {
Button(action: tap) {
Rectangle()
.foregroundColor(.red)
.frame(height: height)
}
}
func tap() {
height = 200
}
}
有什么明显的我遗漏了,或者这只是 UIHostingController 的行为,我无能为力?后者似乎不应该是这样。