我正在创建一个示例应用程序,我在其中复制Facebook屏幕以练习自动布局。 当我以纵向模式运行登录屏幕时,它看起来很完美。
问题是,一旦方向更改为横向,所有视图都会因标题图像而崩溃,as shown here
我想要的是,在横向模式下,标题图像消失,以便其他视图获得其空间。我不想使用scrollview。
我试过了:
headerImageView.isHidden = true
但结果却是this imageview消失了,但没有离开它的空间。 有谁能建议我一个好的解决方案?
P.S 由于我的声誉,对不起这样的图像。
答案 0 :(得分:8)
使用自动布局时,您可以使用大小类。 请参阅下面的说明或示例:https://github.com/jonaszmclaren/AutolayoutExample
设置紧凑宽度和高度的图像视图(wC hC - 风景中的iPhone)和未安装的wR hC(风景中的iPhone Plus):
wC hC和wR hC未启用文本字段和图像视图之间的约束:
最后对于wC hC和wR hC,你必须定义文本字段的顶部约束 - 我把它放在视图的顶部。
这样,portait的图像视图将可见,文本视图将固定到图像视图,并且将隐藏横向图像视图,并将文本字段固定到视图的顶部。
答案 1 :(得分:1)
最好的方法是在这种类型的场景中使用scrollView。如果您不想拥有scrollView,则必须为最后一个按钮赋予底部约束,并将该特定约束的优先级设置为低。它适用于当前屏幕(横向和纵向),但是当你进入小屏幕,即4s或5时,自动布局的目的就会失败。
答案 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
}
}
答案 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应该恢复未使用的空间。