我有以下观点:
对于iPhone 4尺寸的屏幕,我希望将灰色顶部和绿色下部按钮保持相同的尺寸,分别固定在顶部和底部。中间的按钮网格应减小尺寸以适应新的显示。
由于视图尺寸小了88px(548 - 460 = 88),并且有4行按钮,我会以编程方式将每个按钮减少22px并将其移动到位。
但是如果可能的话,我想通过自动布局来实现。
如何指定约束以保持与顶部和底部相同的距离相同,并仅降低视图的高度?
我将它们全部锚定在顶部和底部,但这只会导致:
任何帮助,非常感谢!
答案 0 :(得分:1)
您可以使用自动布局执行此操作。基本上,您应该将灰色标题和调用按钮页脚锚定到超级视图的顶部和底部(分别),并将每个按钮锚定到其邻居。然后指定每个按钮的高度应与第一个按钮的高度相同。
这是约束的可视化格式语言(我认为比试图解释约束更清晰)。 headerView
是顶部的灰色条,footerView
是包含绿色按钮的视图,按钮名称相应。
V:|-[headerView]-0-[buttonOne]-0-[buttonFour(==buttonOne)]-0-[buttonSeven(==buttonOne)]-[buttonPlus(==buttonOne@800)]-0-[footerView]-|
请注意,buttonPlus
的高度约束优先级较低。这是因为页眉和页脚视图之间的空间可能不会在按钮之间平均分配。将优先级设置为低于“required”(优先级== 1000),允许加号按钮比单个按钮略短或更高,但自动布局仍会尽量使其尽可能接近。
水平大小调整与垂直大小调整类似。请注意,此处buttonTwo
的大小与其他大小略有不同,以防水平空间不均匀划分。
H:|-0-[buttonOne]-0-[buttonTwo(==buttonOne@800)]-0-[buttonThree(==buttonOne)]-0-|
一个视图的高度/宽度等于另一个视图的计算是昂贵的,并且可能需要多次通过。最好只在第一列按钮上设置上述约束,然后约束其他列,使每个按钮的顶部和底部与其行中的第一个按钮对齐。您可以在为每行创建水平约束时将NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom
作为options参数执行此操作,并在创建垂直约束时将NSLayoutFormatAlignAllLeft| NSLayoutFormatAlignAllRight
作为{{1}}。
编辑:这仍然可以用于IB。