【发布时间】:2019-07-16 08:16:42
【问题描述】:
在XIB 文件中,我有一个与同名类相关的CustomView。
视图内容非常简单。
有一个垂直的stackview,在stackview里面有两个labels。 stackview 与包含它的视图垂直对齐:
第一个标签(标题)包含一个静态文本(总是几个字符)。 第二个标签(字幕)可以有可变长度的文本。
我将此CustomView 与其他类似视图添加为Content View 的子视图,因为它是一个“行”。
for i in 0...aViews.count {
var v = CustomView(frame: CGRect(x: 0, y: _y, width: 320, height: 100))
v.labelText = "my long label text ..."
contentView.addSubview(v)
// ...
}
你可以想象,标题标签应该有一个固定的位置(顶部和左侧),即不能有一个行标题从10点开始,另一个从14点开始。
我必须承认,我天真地认为标签的位置会由我垂直对齐 stackview 的相同事实自动管理。我错了,我没有发现任何问题,直到他们告诉我第二个标签,即字幕,可以包含多行。
我直接在storyboard的标签里加了几行,发现:
stackview 的容器不会根据其内容的
height更改其height;“固定”元素的位置可能垂直居中但不固定;
我需要的是:
- 标签应“分组”并垂直对齐:从第一个标签的顶部到容器的上边框和从第二个标签的底部到底部边框的间距应该相同;
- 当第二个标签必须显示多于一行时,容器视图应相应更改其高度;
这可能吗?我应该如何设计我的视图?
【问题讨论】:
-
这是什么
contentView.addSubview(v)??它有什么作用? -
您的
contentView和CustomView没有任何限制。 -
@dahiya_boy:正如我所解释的,我向 contentView 添加了许多相似的视图(想象它像一个 tableview,但任何单元格的高度不同,标题和副标题的参数也不同)
-
@CerlinBoss:当前使用框架定位单个自定义视图。你在想什么样的约束?
-
@3000 这是非常糟糕的做法。开发人员避免使用滚动视图并在这种情况下使用表格视图。以后管理scrollview及其内容会很头疼。
标签: ios swift uiview autolayout storyboard