Создание UIViews программно не работает в Xcode 11.1 - PullRequest
1 голос
/ 03 ноября 2019

Я хочу создать UIView как контейнерное представление или даже более программно с помощью snapkit в Xcode 11.1, но кажется, что что-то не так, и я думаю, что Apple изменила UIView в Xcode 11.x (iOS 13.x), потому чтоЯ сделал это очень легко в предыдущих версиях Xcode.

В SceneDelegate.swift (Apple переместила переменную окна из AppDelegate.swift в SceneDelegate.swift)

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
        let viewController = ViewController()
        if let windowScene = scene as? UIWindowScene {
            self.window = UIWindow(windowScene: windowScene)
            self.window?.rootViewController = viewController
            self.window?.makeKeyAndVisible()
        }
    }
}

ViewController.swift

  class ViewController: UIViewController {

    var containerView: UIView = {
        let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
        view.backgroundColor = .green
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .blue
        setUpView()
    }

    func setUpView() {
        self.view.backgroundColor = .blue
        self.view.addSubview(containerView)
        containerView.snp.makeConstraints { (make) in
            make.centerX.equalTo(self.view.snp.centerX)
            make.centerY.equalTo(self.view.snp.centerY)
        }
    }
}

и результат:

enter image description here

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Чтобы отобразить представление с использованием автоперекрытия, вам нужно предоставить все W H X Y, удовлетворяющие механизму макета. Но вы пропустили ограничения width и height.

Попробуйте:

func setUpView() {
    self.view.backgroundColor = .blue
    self.view.addSubview(containerView)
    containerView.snp.makeConstraints { (make) in
        make.width.height.equalTo(100)
        make.center.equalTo(self.view)
    }
}
0 голосов
/ 03 ноября 2019

Вам необходимо установить высоту и ширину вашего контейнера.

containerView.heightAnchor.constraint(equalToConstant: 100).isActive = true
containerView.widthAnchor.constraint(equalToConstant: 100).isActive = true
...