我正在尝试以编程方式将子视图添加到我的视图中。过程如下:
1)从网络
获取媒体数组 2)如果是图片,请构建UIImageView
并将其添加到视图的底部。如果是文本,请构建UITextView
并将其添加到视图的底部
3)重复步骤2直到数组结束
问题:
如果我不知道它们的高度,我该如何创建视图?似乎要添加一个视图我需要指定它的框架。
如何将每个视图添加到现有视图的底部?
提前致谢, 蒂亚戈
答案 0 :(得分:4)
如果您不知道视图的大小,请在添加视图后调用button {
position: relative;
}
button:after {
content: "Can u see me?";
position: absolute;
right: -100px;
top: 0;
}
和sizeToFit
方法。这是代码:
目标C:
layoutIfNeeded
斯威夫特:
[superView addSubview: view];
[view sizeToFit];
[view layoutIfNeeded];
答案 1 :(得分:2)
您始终可以使用零大小的框架(CGRectZero
)创建视图,并在您知道后立即设置其框架。
答案 2 :(得分:1)
我认为您可以使用UITableView来实现此功能。 tableView通常用于显示“N”个项目。您可以创建两个自定义单元格
1表示图像
第二个用于显示文本视图。
然后根据数组的项类型,您可以重复使用这些自定义单元格。
答案 3 :(得分:0)
我假设您要初始化,然后将视图添加为子视图。如果是这样,您可以执行以下操作:
UIView *yourView = [[UIView alloc] initWithFrame: CGRectZero];
//Note - CGRectZero is equivalent to CGRectMake(0,0,0,0)
[superView addSubview: yourView];
现在,当您准备好调整视图大小时,可以按照以下步骤操作:
[yourView setFrame: CGRectMake(newXOrigin, newYOrigin, newWidth, newHeight)];
或者
[yourView sizeToFit];
答案 4 :(得分:0)
所以我已经找到了我的两个问题的答案:
从网络上获取内容后,请致电.layoutIfNeeded()
以布置视图。您现在可以使用视图的contentSize
来绘制它。见下面的例子。
2种方式:
1)使用UITableView,更简单,更可靠
2)有一个变量来保存视图堆栈的底部,并在每次添加新视图时更新它。使用此变量来确定添加新视图的位置。
这是2)的代码:
var yAxis: CGFloat = 0
var textContent: String = "" {
didSet{
var textView = UITextView()
textView.text = textContent
textView.layoutIfNeeded()
textView.frame.size = CGSizeMake(UIScreen.mainScreen().bounds.width, textView.contentSize.height)
textView.frame.origin.y = yAxis
yAxis += textView.contentSize.height
view.addSubview(textView)
}
}
感谢@Dhruv Ramani提示。