iOS - 添加视图而不知道其大小

时间:2015-05-11 19:51:28

标签: ios objective-c swift

我正在尝试以编程方式将子视图添加到我的视图中。过程如下:

1)从网络

获取媒体数组

2)如果是图片,请构建UIImageView并将其添加到视图的底部。如果是文本,请构建UITextView并将其添加到视图的底部

3)重复步骤2直到数组结束

问题:

  • 如果我不知道它们的高度,我该如何创建视图?似乎要添加一个视图我需要指定它的框架。

  • 如何将每个视图添加到现有视图的底部?

提前致谢, 蒂亚戈

5 个答案:

答案 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提示。