Xcode: отключить вращение для представления в ViewController.swift

Я учусь программировать представления в Xcode вместо использования .storyboard.

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

У меня это пока.

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        view.backgroundColor = .white

        let imageView = UIImageView(image: #imageLiteral(resourceName: "facebook_logo.png"))
        view.addSubview(imageView)


        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 300).isActive = true
        imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
        imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    }

person Miguel Yurivilca    schedule 10.04.2019    source источник
comment
Похоже, ответ здесь может сделать то, что вы ищете: stackoverflow.com/questions/38969419/   -  person oaccamsrazor    schedule 11.04.2019
comment
Я не уверен, что это то, что я ищу. Если устройство повернуто, вид не поворачивается.   -  person Miguel Yurivilca    schedule 11.04.2019


Ответы (1)


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

Есть два контроллера представления, связанные переходом (и оба заключены в UINavigationController).

В AppDelegate вам нужно следующее:

var restrictRotation:UIInterfaceOrientationMask = .all

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
{
    return self.restrictRotation
}

введите здесь описание изображения

И viewWillAppear (поскольку он вызывается, когда мы просматриваем стек, так что это лучше, чем использование viewDidLoad) мы

override func viewWillAppear(_ animated: Bool) {
    (UIApplication.shared.delegate as! AppDelegate).restrictRotation = .all
}

Второй вид НЕ будет вращаться. Он просто имеет этикетку. введите здесь описание изображения

в viewDidLoad (вы также можете использовать viewWillAppear)

override func viewDidLoad() {
    super.viewDidLoad()
    (UIApplication.shared.delegate as! AppDelegate).restrictRotation = .portrait
}

Использование только раскадровки или кода не имеет значения, реализация останется прежней.

person stevenpcurtis    schedule 11.04.2019
comment
Ух ты. Большое спасибо за пример. - person Miguel Yurivilca; 12.04.2019