Ios 旋转视图是否与自动布局兼容?

Ios 旋转视图是否与自动布局兼容?,ios,rotation,autolayout,Ios,Rotation,Autolayout,我已经学习了如何使用仿射变换旋转视图(请参见)。我还学习了自动布局(请参见和),甚至编程自动布局(请参见和)。但是,我不知道如何让自动布局与旋转视图一起工作 此图显示了我要执行的操作: 我认为问题在于旋转导致的宽度和高度的变化。有没有办法让旋转视图填充它的superview?是否有一些技巧可以让自动布局发挥作用,或者只是在旋转后不兼容 (我只学过Swift,但如果你更熟悉的话,我很乐意涉猎Objective-C答案。) 更新 根据@VinayJain的建议,我做了以下工作: 将子视图边固定到

我已经学习了如何使用仿射变换旋转视图(请参见)。我还学习了自动布局(请参见和),甚至编程自动布局(请参见和)。但是,我不知道如何让自动布局与旋转视图一起工作

此图显示了我要执行的操作:

我认为问题在于旋转导致的宽度和高度的变化。有没有办法让旋转视图填充它的superview?是否有一些技巧可以让自动布局发挥作用,或者只是在旋转后不兼容

(我只学过Swift,但如果你更熟悉的话,我很乐意涉猎Objective-C答案。)

更新 根据@VinayJain的建议,我做了以下工作:

  • 将子视图边固定到情节提要中的超级视图
  • 用于子视图所有边上的间距约束

    @IBOutlet weak var rightSpace: NSLayoutConstraint!
    @IBOutlet weak var leftSpace: NSLayoutConstraint!
    @IBOutlet weak var topSpace: NSLayoutConstraint!
    @IBOutlet weak var bottomSpace: NSLayoutConstraint!
    
  • 旋转子视图

    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。我只需要它自己调整一下。然而,旋转会把这搞砸。效果如下图所示:


您可以使用autolayout轻松完成此操作

  • 通过将边固定到superview来创建约束
  • 为这些约束创建出口(如leftSpace、rightSpace、topSpace、bottomSpace)

  • 检查旋转,并相应地更新这些值


使用此选项检查旋转:

我在尝试通过HDMI/AirPlay从iOS运行外部视频到旋转电视屏幕时遇到此问题

有时,电视将设置为将信号“旋转”90度或180度等,但通常情况下,电视将没有该选项

使用这样的“包装器”视图,我可以强制外部屏幕上的视图控制器旋转其内容,而不会让内容真正意识到有什么不同

让contentsView=SomeWildCustomViewUsingAutoLayoutEtc()
让包装器=旋转包装器视图(contentsView)
wrapper.translatesAutoResizezingMaskintoConstraints=false
parentView.addSubview(包装器)
// ...
wrapper.rotation=.upsideDown

旋转包装器视图的源代码:

手动旋转的只是子视图,而不是整个设备的方向。然而,你回答的逻辑仍然有效。我会用仿射TransformRotate的点替换你的“检查旋转”。我稍后会试用并更新。@Suragch太好了,请检查它是否适用于您,然后检查它是否适用于您。您可以根据您的要求编辑我的答案。不幸的是,我无法使您的方法起作用。我用尝试你的解决方案的结果更新了我的问题。你找到解决这个问题的方法了吗?我试着将子视图的顶部固定到superview的右侧(所有侧面都是如此),但没有效果。@b呃,是的,我制作了一个自定义的
UIView
(上面的黄色图像)。它由三个视图组成:父视图、子视图和孙视图。孙子视图是我想要显示的实际内容(文本视图等)。子视图实际上是旋转的。(孙子视图位于子视图中,不知道旋转情况。)子视图通过编程方式设置为与父视图相同的大小。然后,您可以在父视图上设置约束,以在故事板中排列它(上面的蓝色图像)。具体看一下
layoutSubviews()
方法。它还处理方向的变化。这不是一个完美的解决方案,但它可以像其他任何
UIView
一样在故事板中设置约束。另请参阅,谢谢!这似乎是可行的,在我的情况下,我不支持多个布局,所以设备旋转不是问题。