ObjectiveC项目中的SwiftUI-列表在预览中起作用,而不是在运行时起作用

时间:2020-03-17 23:16:35

标签: objective-c swiftui swiftui-list

我有一个非常大的Objective-C项目,正在尝试缓慢地合并SwiftUI。我已经能够成功实现swiftUI类中的某些屏幕,这些屏幕从Objective-c类调用。

现在面临的一个奇怪错误是,在运行该应用程序时,列表不可见。虽然在预览中可见。而且,当我用VStack替换List时,在运行该应用程序时看起来还不错。如果我制作一个独立的SwiftUI应用程序并运行此代码,那么它也可以正常运行。问题只在我从Objective-C类调用此类时。

附加的图片

Xcode Preview Screenshot

Device Screenshot

代码


import SwiftUI

struct InfoShareView: View {
    var body: some View {
             List{
                    Text("First Line")
                    Text("Second Line")
            }
            .padding()
            .background(Color.white)
        }

}

struct InfoShareView_Previews: PreviewProvider {
    static var previews: some View {
        InfoShareView()
    }
}

这是对InfoShareView的调用


import UIKit
import SwiftUI

class AboutViewControllerSwift: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swiftController = UIHostingController(rootView: InfoShareView())
        addChild(swiftController)

        swiftController.view.translatesAutoresizingMaskIntoConstraints  = false
        view.addSubview(swiftController.view)

        swiftController.view.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        swiftController.view.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

     }


}

这是Objective-c类的呼叫

AboutViewControllerSwift *aboutViewController = [[AboutViewControllerSwift alloc] initWithNibName:nil bundle:nil];
self.nvgController=[[UINavigationController alloc]initWithRootViewController:aboutViewController];
self.window.rootViewController=self.nvgController;
[self.window makeKeyAndVisible];

1 个答案:

答案 0 :(得分:1)

我认为这是由于限制因素,请尝试使用代替

    ...
    view.addSubview(swiftController.view)

    swiftController.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    swiftController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    swiftController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    swiftController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true