swiftui视图uiview
我试图在Uiview的内部注入SwiftUi视图,它显示了我的SwiftUi视图,但是框架已经远了,我无法弄清楚原因。
更新:解散视图控制器并再次重新加载后,SwiftUI视图被完美地加载/显示,为什么?
这是我的swiftui视图:
@available(iOS 14.0, *)
struct AvailablePointsSummary: View {
@State private var points: PointsResponse? = nil
var body: some View {
if let points = points {
GroupBox(
label: SummaryLabelView(labelText: "Available Points")
) {
SummaryRow(title: "Cash Points", amount: Float(points.cashoutPoints).withCommas())
SummaryRow(title: "Promo Points", amount: Float(points.availablePromoPoints ?? 0).withCommas())
}
.frame(width: 380, height: 160)
} else {
Text("Loading...")
.onAppear {
getPoints()
}
}
}
func getPoints() {
PointsService().getPointsResponse { points in
DispatchQueue.main.async {
self.points = points
}
}
}
}
@available(iOS 14.0, *)
var availPointsSummary = UIHostingController(rootView: AvailablePointsSummary())
我的uiviewController中的设置
func setupAvailablePoints(){
let pointView = availPointsSummary.view
pointView?.translatesAutoresizingMaskIntoConstraints = false
pointView?.frame = CGRect(x: 0, y: 0, width: 380, height: 160)
self.availPointsView.addSubview(pointView!)
self.addChild(availPointsSummary)
}
I am trying to inject a SwiftUI view inside of a UIView, and it is showing my SwiftUI view but the frame is way off and I cannot figure out why.
UPDATE: After dismissing the view controller and reloading it again, the SwiftUI view is loaded/presented perfectly, why is that?
This is my SwiftUI View:
@available(iOS 14.0, *)
struct AvailablePointsSummary: View {
@State private var points: PointsResponse? = nil
var body: some View {
if let points = points {
GroupBox(
label: SummaryLabelView(labelText: "Available Points")
) {
SummaryRow(title: "Cash Points", amount: Float(points.cashoutPoints).withCommas())
SummaryRow(title: "Promo Points", amount: Float(points.availablePromoPoints ?? 0).withCommas())
}
.frame(width: 380, height: 160)
} else {
Text("Loading...")
.onAppear {
getPoints()
}
}
}
func getPoints() {
PointsService().getPointsResponse { points in
DispatchQueue.main.async {
self.points = points
}
}
}
}
@available(iOS 14.0, *)
var availPointsSummary = UIHostingController(rootView: AvailablePointsSummary())
Setup in my UIViewController
func setupAvailablePoints(){
let pointView = availPointsSummary.view
pointView?.translatesAutoresizingMaskIntoConstraints = false
pointView?.frame = CGRect(x: 0, y: 0, width: 380, height: 160)
self.availPointsView.addSubview(pointView!)
self.addChild(availPointsSummary)
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试解决此问题的多个选项:-)
尝试
layoutifneed
在添加hostingController的视图之后,或
尝试在
view> view wwilllayoutsubviews
或Overlide loadView中设置帧或
尝试启用启用启用operage loadViews 自动大小面具
或
添加以下约束
Multiple options to try to fix this issue :-)
try
layoutIfNeeded
after adding hostingcontroller' view to superviewOr
try to set frames inside
viewWillLayoutSubviews
or override loadView to setup frameOr
try enabling auto-sizing masks
Or
add below constraints