我学会了如何使用仿射变换旋转视图(请参阅here)。我还了解了自动布局(请参阅here和here),甚至是程序化自动布局(请参阅here和here)。但是,我不知道如何让自动布局与旋转视图一起使用。
此图显示了我想要做的事情:
我认为问题来自宽度和高度因旋转而变化。有没有办法让旋转视图填充它的超视图?是否有一些技巧可以使自动布局工作或旋转后它是不兼容的?
(我只学过Swift,但如果你更熟悉的话,我会很高兴通过Objective-C答案。)
按照@ VinayJain的建议,我做了以下事情:
created IBOutlets了解子视图各边的间距约束。
@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.我只需要它来调整自己。然而,旋转混乱了。效果如下图所示:
答案 0 :(得分:1)
当我尝试通过HDMI / AirPlay将外部视频从iOS运行到旋转的电视屏幕时遇到了这个问题。
有时候,电视会设置为将信号“旋转” 90度或180度等,但是通常情况下,它没有该选项。
使用这样的“包装”视图,我可以强制外部屏幕上的视图控制器旋转其内容,而内容实际上并不知道有什么不同。
let contentsView = SomeWildCustomViewUsingAutoLayoutEtc()
let wrapper = RotatingWrapperView(contentsView)
wrapper.translatesAutoresizingMaskIntoConstraints = false
parentView.addSubview(wrapper)
// ...
wrapper.rotation = .upsideDown
RotatingWrapperView
的来源:https://github.com/quantcon/UIKit/blob/master/AutoLayoutRotationDemo/Views/RotatingWrapperView.swift
答案 1 :(得分:-2)
您可以轻松地使用自动布局执行此操作,
为这些限制创建出口(比如leftSpace,rightSpace,topSpace,bottomSpace)
检查轮换,并相应更新这些值
使用此选项检查轮换:Check Rotation