在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
...
有更好的方法吗?谢谢,并感谢任何建议或评论。
答案 0 :(得分:2)
使用自动布局功能,可以从界面构建器GUI完成,或者以编程方式完成:
答案 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有用。