我试图编程创建具有两个子视图的UILabel的容器视图,它们的行为如下:动态的UILabel带比例宽度和文本驱动高度
- 容器宽度被固定到它的父;其高度被限制以适合
- 标签被水平地布置,与它们(8分)
- 之间的标准间距的左标签宽度是容器
- 右标签宽度填充的宽度的25%的标签可用空间减去标准水平间距
- 长文字应该在字边界处被打破,流过多条线;两个标签必须垂直增长以容纳长文字
我已经定义了标签numberOfLines = 0
和lineBreakMode = NSLineBreakByWordWrapping
。
请注意,容器的大小是完全动态的;其宽度由其超视图确定,而其高度由其子视图(标签)确定。标签的大小也是动态的;它们的宽度与容器宽度成正比,它们的高度取决于文本的长度。
我已经能够实现上面的所有内容,除了最后一项,具有以下约束(伪代码)。 A是左边的标签,B是右边的。
- A.top == container.top
- B.top == container.top
- A.leading = container.leading
- A.trailing == B.leading - 8
- B.trailing == container.trailing
- A == 0.25 * container.width
- container.height> = A.height
- container.height> = B.height
最后2个约束条件旨在将容器拉伸以适应标签的高度,但布局引擎似乎忽略了标签可能为多行的事实。也就是说,无论文本的长度如何,我都会显示一行。
那么我需要添加/修改/删除哪些约束条件才能实现上述全部行为?
我会建议作出这一在它定义一个非常简单的只有一个视图的示范项目,并将其张贴到Dropbox的(或当量)。如果你能得到一些积分,那么50的奖金也会在这里得到很多关注。有两个想法被抛弃 - 您可以要求标签根据其当前内容调整大小(或询问所需的大小),您可以告诉自动布局系统重新布局,并且如果您实现文本代表,您将知道当文字改变时。我今天没有使用autolayout的经验,但我正在积极地阅读它。 –
我正在开发MonoTouch。我不认为C#演示会对大多数自动布局大师有帮助。 :-( – lencharest