【发布时间】:2021-08-07 22:39:59
【问题描述】:
问题
您好,我需要有关 SwiftUI 视图的帮助,该视图由故事板中配置的视图控制器呈现。
我使用UIHostingController 提供了一个 SwiftUI 视图,包括它自己的模型,如本文所述:addSubView SwiftUI View to UIKit UIView in Swift。
现在我的视图在其托管视图控制器的 view 属性内缩小到其内容大小。
我尝试过的
- 将父视图控制器内的
ContainerView包装成两个StackViews以强制视图使用整个屏幕(垂直和水平) - 在我的 SwiftUI 视图中使用
.frame(minWidth: 0, maxWidth: .infinity)配置初始VStack - 按照Make a VStack fill the width of the screen in SwiftUI 中的建议,在该堆栈内的所有元素下方和下方使用初始
HStack和Spacer()
一些代码
视图控制器:
class SomeParentViewController: UIViewController {
var detailsView: DetailsOverlayView? // --> SwiftUI View
var detailsViewModel: DetailsOverlayViewModel? // --> Its model
var childVC: UIHostingController<DetailsOverlayView>? // --> Child VC to present View
// inside UIView
var detailData: DetailData?
override func viewDidLoad() {
super.viewDidLoad()
if let data = detailData {
model = DetailsOverlayViewModel(data: data)
}
if let m = model {
detailsView = DetailsOverlayView(viewModel: m)
}
if let v = paymentDetailsView {
child = UIHostingController(rootView: v)
child?.view.translatesAutoresizingMaskIntoConstraints = false
child?.view.frame = self.view.bounds
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let cvc = childVC {
self.addSubview(cvc.view)
self.addChild(cvc)
}
}
...
}
SwiftUI 视图:
...
var body: some View {
VStack(alignment: .leading, spacing: 16) {
// Title
HStack {
Text("My great and awesome title")
}
VStack(alignment: .leading, spacing: 0) {
Text("My even more awesome subtitle")
HStack(alignment: .top) {
Text("on the left 1")
Spacer()
Text("on the right 1")
}
HStack(alignment: .top) {
Text("on the left 2")
Spacer()
Text("on the right 2")
}
Divider()
}
}
.frame(minWidth: 0, maxWidth: .infinity)
.padding(16)
}
...
结果图片
【问题讨论】:
-
试试
child?.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] -
感谢您的建议!不幸的是,这不起作用。