如何在iOS中水平对齐子视图?

时间:2014-04-21 04:42:02

标签: objective-c uiview

在Android中,当您将子视图添加到水平LinearLayout时,您会看到所有子视图都会水平对齐。

|subview1|subview2|subview3...

在iOS中,我该如何实现这一目标? 我有一个UIView作为父视图,但是当我添加子视图时,它会堆叠在一起。如何使用UIView.addSubView使所有子视图水平对齐?

我正在尝试的一种方法是更改​​每个子视图的frames.origin.x. 例如

subview1.origin.x = 0
subview2.origin.x = subview1.origin.x + subview1.size.width
subview3.origin.x = subview2.origin.x + subview2.size.width
...

有更好的方法吗?谢谢,并感谢任何建议或评论。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

是的,你正确的方向 - 你必须手动改变视图的框架。有一个方便的API:

subview1.origin.x = 0
subview2.origin.x = CGRectGetMaxX(subview1.frame);
subview3.origin.x = CGRectGetMaxX(subview2.frame);

考虑到ios 6.0提供的约束

答案 2 :(得分:1)

或者:

如果使用Interface Builder(Nibs或Storyboard),则在另一个答案中建议使用AutoLayout。

AutoResizingMasks通过对齐它们并设置灵活的上下边距。

使用UIView的{​​{1}}属性手动。

center

答案 3 :(得分:0)

从iOS 9开始,您可以使用UIStackView,它与LinearLayout的工作方式非常相似:您可以添加视图,并根据您的大小调整选项根据需要排列堆栈视图。如果您正在使用Interface Builder,您可以尝试使用每个选项来查看哪个选项适合您的需求。您还可以在堆栈视图中设置视图之间的间距,添加一些填充。

根据您的特殊需求,使用stackView.axis = UILayoutConstraintAxisHorizontal;使您的观点水平排列。

警告:在代码中添加堆栈视图子视图时,您应始终使用addArrangedSubview(),如下所示:

stackView.addArrangedSubview(someView)

如果您尝试使用普通的旧addSubview(),它将无法正常工作,因为堆栈视图无法安排它。

至于删除,您需要小心使用stackView.removeArrangedSubview(someView) someView.removeFromSuperview()否则视图将无法正确删除。

您可能会发现我的UIStackView tutorial有用。