Swift - вид контейнера не изменяется при изменении ориентации - PullRequest
0 голосов
/ 20 июня 2020

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

У меня есть контроллер представления (sampleV C) внутри контейнера (sampleContainer), который отлично загружается в любом месте начните с, но это не изменится после изменения с альбомной на портретную или наоборот.

В моем контроллере представления у меня есть:

    func addSampleVC() {
        self.addChild(self.sampleVC)
        self.sampleVC.didMove(toParent: self)
        self.sampleContainer.addSubview(self.sampleVC.view)
        self.addSampleConstraints()
    }

   func addSampleConstraints() {
        sampleContainer.bounds = CGRect(x: 0, y: -20, width: sampleContainer.bounds.width, height: sampleContainer.bounds.height)
        sampleVC.view.bounds = CGRect(x: 0, y: 0, width: sampleContainer.bounds.width * 0.94, height: sampleContainer.bounds.height)
        sampleVC.view.leftAnchor.constraint(equalTo: sampleContainer.leftAnchor, constant: 20).isActive = true
        sampleContainer.clipsToBounds = true

        NSLayoutConstraint.constrain(view: sampleVC.view, containerView: sampleContainer)
    }

Вызывается функция addSampleV C из viewDidLoad. Основываясь на других ответах, я попытался получить обновленные границы контейнера внутри viewWillTransition, а затем вызвать setNeedsLayout и setNeedsUpdate, но мне что-то не хватает, потому что, похоже, ничего не работает. Спасибо за любые идеи.

1 Ответ

1 голос
/ 20 июня 2020

Один раз я имел дело с контейнерами представлений, поэтому я постараюсь помочь вам как можно лучше.

Вы можете использовать автоматический макет или «ручной» макет (также известный как ограничения автоматического изменения размера). В вашем коде внутри addSampleConstraints оператор левой привязки в строке 3 будет проигнорирован, поскольку автоматическая компоновка не была явно установлена.

  1. Ручная компоновка:
    func addSampleVC() {
        self.addChild(self.sampleVC)
        self.sampleContainer.addSubview(self.sampleVC.view)
        self.addSampleConstraints()
        self.sampleVC.didMove(toParent: self)
    }

   func addSampleConstraints() {
        sampleContainer.bounds = CGRect(x: 0, y: -20, width: sampleContainer.bounds.width, height: sampleContainer.bounds.height)
        sampleVC.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        sampleVC.view.frame = CGRect(x: 0, y: 0, width: sampleContainer.bounds.width * 0.94, height: sampleContainer.bounds.height)
        sampleContainer.clipsToBounds = true
    }
Автоматический макет (первая функция такая же, как в 1.):
   func addSampleConstraints() {
        sampleContainer.translatesAutoResizingMaskIntoConstraints = false // Setting Auto layout
        sampleVC.view.translatesAutoResizingMaskIntoConstraints = false // Setting Auto layout
        sampleVC.view.topAnchor.constraint(equalTo: sampleContainer.topAnchor).isActive = true
        sampleVC.view.bottomAnchor.constraint(equalTo: sampleContainer.bottomAnchor).isActive = true
        sampleVC.view.widthAnchor.constraint(equalTo: sampleContainer.widthAnchor, multiplier: 0.94).isActive = true
        sampleVC.view.leftAnchor.constraint(equalTo: sampleContainer.leftAnchor, constant: 20).isActive = true
        sampleContainer.clipsToBounds = true
    }
...