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

Hiding a view when orientation changes to landscape in autolayouts

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

问题是一旦方向变为横向,所有视图都会因为 header 图片、as shown here

而崩溃

我想要的是,在横向模式下,header 图像消失,以便其他视图获得它的 space。我不想使用滚动视图。

我试过这个:

headerImageView.isHidden = true

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

P.s 抱歉,由于我的声誉,图像是这样的。

如果您隐藏图片,它只会不显示给用户,但 Space 将被屏幕上的图片使用。更好的方法是当方向更改为横向时,您可以设置图像 0 的高度。您可以创建图像高度约束的出口并根据 Orientation.This 方法在更改之前调用方法进行更改。您需要创建图像的高度约束的 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
                }
            }

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

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

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

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

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

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

例如:

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

并在竖屏模式下重新设置高度。

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

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

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