繁体   English   中英

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

[英]Hiding a view when orientation changes to landscape in autolayouts

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

问题是,一旦方向更改为横向,所有视图都会因标题图像而崩溃, 如此处所示

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

我试过这个:

headerImageView.isHidden = true

但结果却出现了这种情况 。图像视图消失了,但没有留下它的空间。 谁能建议我一个好的解决方案?

因为我的声誉,对不起这些图像。

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

设置紧凑宽度和高度的图像视图(wC hC - 横向iPhone)和未安装的wR hC(横向iPhone版):

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

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

像我一样

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

@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
                }
            }

请参阅图片,我指出如何在图像中设置高度约束

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

例如:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM