SwiftUI в Objective C Project - список работает в режиме предварительного просмотра, а не при его запуске - PullRequest
1 голос
/ 18 марта 2020

У меня очень большая цель - c проект, и я пытаюсь медленно внедрить SwiftUI. Мне удалось успешно реализовать некоторые экраны в классах swiftUI, которые вызываются из классов Objective- c.

Одна странная ошибка, с которой я столкнулся сейчас, заключается в том, что Список не виден при запуске приложения. Это видно в предварительном просмотре, хотя. А также, когда я заменяю List на VStack, он выглядит нормально при запуске приложения. Если я создаю отдельное приложение SwiftUI и запускаю этот код, то он тоже работает нормально. Проблема только в том, когда я вызываю этот класс из объективного класса c.

Прикрепленные изображения

Xcode Preview 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

     }


}

И вот это вызов из объектива - 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 голосов
/ 18 марта 2020

Я думаю, что это связано с ограничениями, попробуйте использовать вместо следующих

    ...
    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
...