我正在尝试以编程方式创建一个包含两个 UILabel 子视图的容器视图,其行为如下:
- 容器宽度固定到其父视图;它的高度被限制为适合标签
- 标签水平放置,它们之间有标准间距(8pts)
- 左侧标签宽度为容器宽度的 25%
- 右标签宽度填满可用空间,减去标准水平间距
- 长文本应该在字边界处被打破,跨越多行;两个标签都必须垂直增长以适应长文本
我用numberOfLines = 0
和定义了标签lineBreakMode = NSLineBreakByWordWrapping
。
注意容器的大小是完全动态的;它的宽度由它的父视图决定,而它的高度由它的子视图(标签)决定。标签的大小也是动态的;它们的宽度与容器宽度成正比,它们的高度取决于文本的长度。
除了最后一项之外,我已经能够通过以下约束(伪代码)实现上述所有目标。A是左标签,B是右标签。
- A.top == 容器.top
- B.top == 容器.top
- A.leading = container.leading
- A.trailing == B.leading - 8
- B.trailing == container.trailing
- A == .25 * 容器宽度
- container.height >= A.height
- container.height >= B.height
最后两个约束旨在拉伸容器以适应较高的标签,但布局引擎似乎忽略了标签可能是多行的事实。也就是说,无论文本的长度如何,我总是会显示一行。
那么我需要添加/修改/删除哪些约束才能实现上述全套行为?