在iOS应用程序中,如何让2个元素彼此相邻?

时间:2013-12-19 01:18:54

标签: ios interface-builder

我是iOS开发的新手,我正在完成我的第一个教程。教程跳过的一件事是定位。我有一个列表,其中每个单元格都有一个图像,旁边有一些文字。至少在Interface Builder中它是如何出现的。当我实际运行应用程序时,图像显示在文本的顶部(即两者从屏幕的左侧具有相同的精确定位)。

界面生成器

Interface Builder

正在运行应用

Running App

我基本上想要的是CSS语言中的“float:left”,或者甚至是每个元素的x / y坐标的相对位置(即,如果它在运行应用程序时看起来相同/相似在故事板中),这将是伟大的。

在使用所有各种View属性时,我找不到任何可以定位视图的内容......我可以找到将它们放置在 Interface Builder 中的属性,但这些设置似乎都没有在应用程序运行时转移到应用程序,图像/文本始终显示在彼此之上。

我为新手问题道歉...这可能是一些简单/明显的事情,但我已经不知所措了。

3 个答案:

答案 0 :(得分:1)

如果您使用Xcode5进行测试,默认情况下该应用程序将使用AutoLayout功能。你对这种布局的约束似乎是错误的。如果你想用AutoLayout将视图定位到正确的位置,你需要从苹果官方网站上阅读一些材料。如果你没有太多时间学习,你可以尝试编辑没有AutoLayout的xib。您可以在界面构建器的“文件检查器”中禁用AutoLayout。

答案 1 :(得分:1)

如果您不熟悉iOS开发(就像我一样),您应该熟悉AutoLayout,如Eric的回答所示。

如果您正在寻找问题的快速解决方案,以下所有选项都适用于我:

  1. 选择标签,然后选择水平空间约束并将其删除。 Horizontal Space Constraint
  2. 选择标签并点击cmd-plus(即cmd + shift + equals)。这将立即删除所有定位约束。
  3. 关闭AutoLayout。 Disable AutoLayout
  4. 还有其他方法可以解决我遇到的问题,但通常问题是AutoLayout约束不正确。

答案 2 :(得分:0)

如果您对代码感到满意,我建议您手动将框架设置为使用CGRect定义的CGRectMake(origin.x, origin.y, width, height)。您也可以使用autolayout设置执行此操作,但我发现以编程方式定位元素为我提供了更大的灵活性,而且,作为程序员,它比尝试在界面构建器中找出选项容易得多。

iOS坐标系是自上而下,这意味着y = 0是屏幕的顶部,y = 568是屏幕的底部(在iPhone 5上)。屏幕左侧的X为0。

坐标系相对于它们所处的视图。在您的情况下,您的元素位于UITableCell,由渲染引擎给出了自己的坐标系。因此,如果您希望图像从顶部开始10px,从单元格边缘左侧开始10px(css中的la padding:10px),则可以像这样设置其框架:

image.frame = CGRectMake(10, 10, 50, 50)

...假设图像是50x50。