在方向更改为自动布局中的横向时隐藏视图

时间:2017-09-15 05:56:45

标签: ios swift ios-autolayout

我正在创建一个示例应用程序,我在其中复制Facebook屏幕以练习自动布局。 当我以纵向模式运行登录屏幕时,它看起来很完美。

问题是,一旦方向更改为横向,所有视图都会因标题图像而崩溃,as shown here

我想要的是,在横向模式下,标题图像消失,以便其他视图获得其空间。我不想使用scrollview。

我试过了:

headerImageView.isHidden = true

但结果却是this imageview消失了,但没有离开它的空间。 有谁能建议我一个好的解决方案?

P.S 由于我的声誉,对不起这样的图像。

5 个答案:

答案 0 :(得分:8)

使用自动布局时,您可以使用大小类。 请参阅下面的说明或示例:https://github.com/jonaszmclaren/AutolayoutExample

设置紧凑宽度和高度的图像视图(wC hC - 风景中的iPhone)和未安装的wR hC(风景中的iPhone Plus):

enter image description here

wC hC和wR hC未启用文本字段和图像视图之间的约束:

enter image description here

最后对于wC hC和wR hC,你必须定义文本字段的顶部约束 - 我把它放在视图的顶部。

enter image description here

这样,portait的图像视图将可见,文本视图将固定到图像视图,并且将隐藏横向图像视图,并将文本字段固定到视图的顶部。

答案 1 :(得分:1)

最好的方法是在这种类型的场景中使用scrollView。如果您不想拥有scrollView,则必须为最后一个按钮赋予底部约束,并将该特定约束的优先级设置为低。它适用于当前屏幕(横向和纵向),但是当你进入小屏幕,即4s或5时,自动布局的目的就会失败。

like I did

答案 2 :(得分:0)

如果隐藏图像而不向用户显示图像,则屏幕上的图像将使用空格。更好的方法是,当方向更改为横向时,您可以设置图像高度0。您可以创建图像的高度约束出口并根据方向更改它。此方法在orintation更改之前调用。您需要创建图像高度约束的outlat。

@IBOutlet var heightConstraint : NSLayoutConstraint!


       override func willRotate(to toInterfaceOrientation: UIInterfaceOrientation, duration: TimeInterval)
            {
                if toInterfaceOrientation == .landscapeLeft || toInterfaceOrientation == .landscapeRight{
    // Imageview height constraint outlate
                    heightConstraint.constant = 0
                }
                else{
                    heightConstraint.constant = 100
                }
            }

See in image, i point out for How set Height Constraint in image

答案 3 :(得分:0)

isHidden只会更改视图的可见性。它不会将其从该位置移除。要解决此问题,会在方向更改时创建标题视图的高度限制出口并将其更改为

例如:

headerViewHeightConstraint.constant = 0.0
self.view.layoutIfNeeded()

并再次以纵向模式设定高度恢复。

headerViewHeightConstraint.constant = // height value which you want to set
self.view.layoutIfNeeded()

答案 4 :(得分:0)

另一种选择可能是将视图放在堆栈视图中。然后隐藏headerImageView应该恢复未使用的空间。