Совместимы ли поворотные представления с Auto Layout? - программирование

Совместимы ли поворотные представления с Auto Layout?

Я научился вращать представление с помощью Affine Transforms (см. здесь). Я также узнал об Auto Layout (см. здесь и здесь), и даже программный автоматический макет (см. здесь и здесь). Однако я не знаю, как заставить Auto Layout работать с повернутым представлением.

На этом изображении показано, что я хотел бы сделать:

enter image description here

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

(Я только научился Swift, но я был бы рад пройти через ответы Objective-C, если это то, с чем вы более знакомы.)

Update

Следуя предложению @VinayJain, я сделал следующее:

  • приподнял края subview в супервизии в раскадровке.
  • создал IBOutlets для ограничений расстояния со всех сторон подвью.

    @IBOutlet weak var rightSpace: NSLayoutConstraint!
    @IBOutlet weak var leftSpace: NSLayoutConstraint!
    @IBOutlet weak var topSpace: NSLayoutConstraint!
    @IBOutlet weak var bottomSpace: NSLayoutConstraint!
    
  • повернул subview

    subview.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
    
  • изменили ограничения от выходов

    self.rightSpace.constant = CGFloat(0)
    self.leftSpace.constant = CGFloat(0)
    self.topSpace.constant = CGFloat(0)
    self.bottomSpace.constant = CGFloat(0)
    

Но именно в этот момент я понял, что мне действительно не нужно менять значение интервала. Я хочу, чтобы интервал оставался 0. Мне просто нужно его настроить. Однако, вращение беспорядков, что вверх. Эффект показан на следующем изображении:

enter image description here

4b9b3361

Ответ 1

Вы можете легко сделать это с помощью автоматической автозагрузки,

  • Создание ограничений путем привязки ребер к супервизору
  • Создание точек для этих ограничений (скажем, leftSpace, rightSpace, topSpace, bottomSpace)

  • Проверьте вращение и соответствующим образом обновите эти значения.

Используйте это для проверки вращения: Проверить ротацию