Ios 旋转视图是否与自动布局兼容?
我已经学习了如何使用仿射变换旋转视图(请参见)。我还学习了自动布局(请参见和),甚至编程自动布局(请参见和)。但是,我不知道如何让自动布局与旋转视图一起工作 此图显示了我要执行的操作: 我认为问题在于旋转导致的宽度和高度的变化。有没有办法让旋转视图填充它的superview?是否有一些技巧可以让自动布局发挥作用,或者只是在旋转后不兼容 (我只学过Swift,但如果你更熟悉的话,我很乐意涉猎Objective-C答案。) 更新 根据@VinayJain的建议,我做了以下工作:Ios 旋转视图是否与自动布局兼容?,ios,rotation,autolayout,Ios,Rotation,Autolayout,我已经学习了如何使用仿射变换旋转视图(请参见)。我还学习了自动布局(请参见和),甚至编程自动布局(请参见和)。但是,我不知道如何让自动布局与旋转视图一起工作 此图显示了我要执行的操作: 我认为问题在于旋转导致的宽度和高度的变化。有没有办法让旋转视图填充它的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)
您可以使用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
一样在故事板中设置约束。另请参阅,谢谢!这似乎是可行的,在我的情况下,我不支持多个布局,所以设备旋转不是问题。