目标c-如何在iOS中水平对齐子视图



在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
...

有更好的方法吗?谢谢,如果有任何建议或意见,我们将不胜感激。

使用自动布局功能,该功能可以从界面构建器GUI中完成,也可以编程完成:

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/AutoLayoutinCode/AutoLayoutinCode.html#//apple_ref/doc/uid/TP40010853-CH11-SW1

是的,你正在朝着正确的方向做——你必须手动更改视图的框架。有一个方便的API:

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

考虑到ios 6.0 中有可用的约束

任一:

如果使用界面生成器(Nibs或Storyboards),则按照另一个答案中的建议进行自动布局。

AutoResizingMasks,方法是将它们对齐一次并设置灵活的上下边距。

通过使用UIViewcenter属性手动执行。

CGFloat centerY = ...;
for (UIView * view in superview.subviews)
{
    view.center = CGPointMake(view.center.x, centerY);
}

从iOS 9开始,您可以使用UIStackView,它的工作原理与LinearLayout非常相似:您添加视图,堆栈视图根据您的大小选项根据需要排列视图。如果您使用的是Interface Builder,您可以对每个选项进行实验,看看哪一个适合您的需求。您也可以在堆栈视图中设置视图之间的间距,添加一些填充。

根据您的特殊需要,使用stackView.axis = UILayoutConstraintAxisHorizontal;使视图水平排列。

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

stackView.addArrangedSubview(someView)

如果你尝试使用普通的旧addSubview(),它将无法正常工作,因为堆栈视图不知道如何排列它

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

你可能会发现我的UIStackView教程很有用。

最新更新