在自动布局中方向更改为横向时隐藏视图
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.
我正在创建一个示例应用程序,我在其中复制 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.