![](/img/trans.png)
[英]How to make a unlimited width view in SwiftUI that overflow the screen?
[英]Make SwiftUI View embedded in Storyboard ViewController use full Screen Width
您好,我需要 SwiftUI 視圖的幫助,該視圖由在 storyboard 中配置的視圖 Controller 呈現。
I present a SwiftUI View including its own model using a UIHostingController
as described in this post: addSubView SwiftUI View to UIKit UIView in Swift .
現在,我的視圖在其托管視圖控制器的view
屬性中縮小到其內容大小。
ContainerView
包裝成兩個StackViews
來強制view 使用整個屏幕(垂直和水平).frame(minWidth: 0, maxWidth: .infinity)
在我的 SwiftUI 視圖中配置初始VStack
Spacer()
的初始HStack
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)
}
}
...
}
...
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)
}
...
考慮到包裝在UIHostingController中的SwiftUI視圖的行為方式與UIViewController的行為方式相同,您將以相同的方式定義自動布局約束。
聲明translatesAutoresizingMaskIntoConstraints = false
后,我將假設這是計划。 在這種情況下,我建議如下:
NSLayoutConstraint.activate([
child.view.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
child.view.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
child.view.widthAnchor.constraint(equalTo: self.view.widthAnchor),
child.view.heightAnchor.constraint(equalTo: self.view.heighAnchor)
])
以上使 UIHostingController 與父 controller 大小相同並以它為中心。 高度和寬度錨點可以是常數,這樣您就可以.constraint(equalToConstant: 150)
或您喜歡的任何其他變體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.