布局iPhone UI项目的最佳方法是什么?现在我正在使用CGRectMake并指定每个UI项目(标签,视图,按钮等)的确切x和y坐标,并将每个UI项目添加到当前视图。
我看到的一个问题是,如果其中一个项目改变了高度或宽度,我将不得不调整其他UI项目的x和y坐标,因此维护将是一个挑战。
有替代方法吗?在HTML / CSS中,我习惯于使用边距而不是绝对定位来相对于彼此放置项目。你建议我做些什么来保持维护容易和无压力?
答案 0 :(得分:1)
没有。据我所知,在iOS中不可能使用相对布局。您可以使用界面构建器来设计UI,这样可以更轻松地定位UI元素。
您还可以考虑使用 UIView 的autoResizingMask属性。是的,
一个整数位掩码,用于确定接收器在超视图边界发生变化时如何调整自身大小。
答案 1 :(得分:1)
我认为没有一种自动方式来实现这一目标 我认为你唯一的选择就是编写一个方法,但即使这样做也很棘手,你需要确定受影响的元素并知道要重新定位的元素(参见下面的一个非常简单的例子)。
-(void)adjustUIElements:(CGSize)newSize{
//for example
button1.frame = CGRectMake(
(button1.frame.origin.x + newSize.width),
(button1.frame.origin.y + newSize.height),
button1.frame.size.width,
button1.frame.size.height);
//etc.
}
这个例子的好处在于,只要尺寸发生变化,你就可以运行它。它需要一段时间才能正确,但是你可以在你认为合适的任何功能中重复使用它。
答案 2 :(得分:1)
我一直在做的是使用全局常量来设置高度,宽度,xoffset和yoffsets。例如。我知道我想要彼此相邻的2个按钮,A和B,其中A是20,20来自原点,B是20右边A:
Constants.m:
CGFloat buttonHeight = 50, buttonWidth = 100;
CGFloat buttonAXoffset = 20, buttonAYoffset = 0;
CGFloat buttonBXoffset = 20, buttonBYoffset = 0;
CGFloat initialXoffset = 0, initialYoffset = 20;
(并使用Constants.h用extern CGFloat blah
声明它们)
要绘制按钮,请设置CGFloat creatorCursorX = initialXoffset, creatorCursorY = initialYoffset;
这将是您的相对光标
然后,在创建按钮A的上方,执行creatorCursorX += buttonAXoffset; creatorCursorY += buttonAYOffset;
,并使用creatorCursorX
和creatorCursorY
设置其位置buttonHeight
和buttonWidth
创建按钮A后,执行creatorCursorX += buttonWidth;
因此,当您开始制作按钮B时,您已经有了一个光标,您可以使用该光标相对于按钮A放置按钮B,就像上面一样。之前添加偏移量,之后添加大小。这样可以轻松切换按钮(和其他布局项目)
您也可以编辑此方法以将项目放在屏幕上
顺便说一句,要在新行上开始光标,只需再次设置creatorCursorX = initialXoffset
并将Y距离添加到creatorCursorY
我不是这方面的专家,但我发现这种方法效率最高,以后可以轻松调整。无需筛选代码,只需按顺序对块进行调整,然后转到Constants.m
更改大小。
答案 3 :(得分:0)
我无法在面向公众的Apple网站上找到任何关于它的内容,但我在其中一个谣言网站上看到Apple将在Lion推出一个名为Cocoa Autolayout的新布局系统。不幸的是,它不适用于下一个iOS版本。
我不想链接到任何特定文档,但在您最喜欢的搜索引擎上搜索“Cocoa Autolayout”会给您一些关于自动布局如何工作的一般信息。
如果您是已注册的iOS开发人员,则应该可以访问该主题的其中一个WWDC会话。