2015-06-15 23 views
4

我学会了如何用仿射变换旋转视图(请参见here)。我还了解了自动布局(请参阅herehere),甚至了解编程式自动布局(请参阅herehere)。但是,我不知道如何让自动布局使用旋转视图。旋转视图与自动布局兼容?

此图片显示我想要做什么:

enter image description here

我觉得麻烦来自于宽度和高度,因为旋转的变化。有什么办法让旋转视图填充它的超级视图吗?是否有一些技巧让自动布局工作,或只是在旋转后不兼容?

(我只学会了斯威夫特,但我会很高兴通过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.我只是需要它来调整自己。然而,轮换混乱了。效果显示如下图:

enter image description here

+0

你有没有找到一个解决方案?我试图钉在子视图的顶部的超级视图的权利(等各方面)无济于事。 – BFeher

+0

@BFeher,是的,我做了一个自定义的'UIView'(上面的黄色图片)。它由三个视图组成:父视图,子视图和孙子视图。孙子视图是我想要显示的实际内容旋转(文本视图等)。子视图是实际旋转的内容。 (孙子视图位于子视图中,并且不知道旋转。)子视图以编程方式设置为与父视图大小相同。然后,您可以在父视图上设置约束,以将其安排在故事板中(上图中的蓝色图像)。 – Suragch

+0

查看我的当前实现[github项目](https://github.com/suragch/iOS-Mongol-App-Components/blob/master/Mongol%20App%20Componants/UIMongolTextView.swift)。特别注意'layoutSubviews()'方法。它也处理方向变化。它不是一个完美的解决方案,但它可以像故事板中的任何其他'UIView'一样设置约束条件。 – Suragch

回答

-2

你可以用自动布局很容易做到这一点,

  • 被钉扎边创建约束,以上海华
  • 创建这些约束网点(说它离开空间,rightSpace,topSpace,bottomSpace)

  • 检查轮换,并相应地更新这些值

使用此检查旋转:Check Rotation

+0

它只是手动旋转的子视图,而不是整个设备的方向。但是,您的答案的逻辑仍然有效。我只是用我做AffineTransformRotate的点替换你的“检查轮换”。我会试试看,稍后再更新。 – Suragch

+0

@Suragch太棒了,请检查它是否适用于您,然后如果它有效,请根据您的要求编辑我的答案 –

+0

不幸的是,我无法让您的方法正常工作。我使用试用解决方案的结果更新了我的问题。 – Suragch