2013-07-18 78 views
2

我试图创建一些我认为使用iOS自动布局的简单方法。我一直在这上几天,买了一本书,并尝试了各种关键字搜索组合。任何人之前做过这些,可以指引我正确的方向?iOS自动布局:3列标签布局,中间列宽度可变

我想要3列UILabels,列中排列,与中间一个(其中有更多的内容)是可变宽度取决于iPad的方向。

我可以得到这个工作,但是一旦iPad从横向旋转到纵向(因此减少了中间标签可用的宽度),中间标签内容就会被切断。 即中间标签高度不调整大小。

这就是我想要达到的目标: This is what I want to achieve

一旦你旋转为纵向: Once you rotate to portrait

这里是我的约束和景观层次: Here are my constraints and View hierarchy

如果我给中间的UILabel高度约束'小于或等于'250(它需要显示所有内容的高度,以狭窄的portait模式显示),一旦iPad重新定位,标签内容将扩展以适应新的widt小时,但也不再与任何一方的其他标签的顶部对齐。

错误垂直对齐 wrong alignment

这里是我的中间标签 constraints on middle label

(即高度等于250具有1的优先级,因为它是一个生成的约束,我不能摆脱的约束。 )

我已经尝试了如此多的内容拥抱和压缩抵抗的组合,我确信这将是答案,即需要UILabel帧来拥抱内容。我显然不理解,我也应该。

回答

1

好了,终于想出找到这个计算器的问题后: Link to answer
它现在的工作,因为我本来希望

我所要做的就是设置换行符“自动换行”,并更新优选的宽度上的装置取向,像这样

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
    if (UIDeviceOrientationIsLandscape(interfaceOrientation)) { 
     self.middleLabel.preferredMaxLayoutWidth = 600; 
    } else { 
     self.middleLabel.preferredMaxLayoutWidth = 314; 
    } 
} 

因此,综上所述,这是增加内容拥抱,降低了高度约束的优先级和对设备取向更新preferredMaxLayoutWidth的组合。 不过,将硬编码的值放入布局代码中感觉不对。能想出更好的办法吗?

0

改变灰色框的大小编程,在界面生成器,用于

左文本字段设置该属性 https://dl.dropboxusercontent.com/u/1172778/left.png

中间文本字段 https://dl.dropboxusercontent.com/u/1172778/middle.png

文本将填补容器(灰色框在您的图片)。

对不起,我的英语不好。

+0

我使用自动布局,而不是旧的弹簧和支柱,或者你是说我应该关闭该UILabel的自动布局? –

+0

如果您使用xib,请禁用。使用故事板,您将禁用所有屏幕。 – Elto

+0

谢谢,但我转移到自动布局,以帮助在主内容视图中布局元素。我真的很想知道这是否可以使用自动布局 –