带有动态内容的UIScrollView

时间:2014-04-06 00:16:54

标签: ios objective-c xcode uiscrollview

我正在尝试实施UIScrollView,但每个教程都会处理预设数量的项目。

我所拥有的是多个UITextField,但文本字段的数量各不相同。基本上,只要一个textField包含文本,另一个空文本就会出现在其下方,允许用户填写无限数量的文本字段。

我的代码会在用户将内容输入到上一个文本字段后立即创建一个新文本字段。此x-coordinates与前一个相同,但新y-coordinates等于前一个+ 5px的高度。

我正在使用故事板,我已将原始textField放在UIScrollView内。我已将此scrollView与我的代码相关联,并以这种方式添加新文本字段:[self.scrollView addSubview:newTextField];

但是,当textFields的数量超过scrollView时,我无法滚动显示已添加的新数据。

我该怎么做呢?我不认为我完全得到setContentSize的东西,所以它可能与此有关。这里有一些图片和代码来解释我的问题:

添加新文字字段的代码:

UITextField *newTextField = [[UITextField alloc]initWithFrame:CGRectMake(textField.frame.origin.x, textField.frame.origin.y + textField.frame.size.height+5, textField.frame.size.width, textField.frame.size.height)];
newTextField.placeholder = @"Add more text";
newTextField.borderStyle = UITextBorderStyleNone;
newTextField.font = [UIFont systemFontOfSize:14];
newTextField.autocorrectionType = UITextAutocorrectionTypeYes;
newTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
newTextField.autocapitalizationType = UITextAutocapitalizationTypeSentences;
newTextField.returnKeyType = UIReturnKeyDone;
[newTextField setTag:textFieldTag];
newTextField.delegate = self;
[self.scrollView addSubview:newTextField];

故事板:

Here you can see how I have placed the original textfield within my scrollview

在这里,您可以看到我如何将原始文本字段放在我的滚动视图中

它在模拟器中的外观:

When you enter text in the textfield, this happens:

在文本字段中输入文字时,会发生以下情况:

An empty textfield appears below the previous one

上一个文本框下方会出现一个空文本字段。

但是,当您超出ScrollView时,会发生这种情况

You can no longer see the new textfield, because it is below the scrollView

您无法再看到新的textField,因为它位于scrollView的边界下方。你无法滚动显示它。


有谁知道如何解决这个问题?如果你有时间,你会如何制作它以使scrollview自动向下滚动以显示已添加的新文本字段?

非常感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:9)

contentSize必须是滚动视图中包含的内容的大小。

如果contentSizebounds.size宽,则可以向左和向右滚动。如果contentSize高于bounds.size,则可以向上和向下滚动。

您需要将contentSize设置为滚动视图中要包含的整个区域。

UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(textField.frame.origin.x, textField.frame.origin.y + textField.frame.size.height+5, textField.frame.size.width, textField.frame.size.height)];
textField.placeholder = @"Add more text";
textField.borderStyle = UITextBorderStyleNone;
textField.font = [UIFont systemFontOfSize:14];
textField.autocorrectionType = UITextAutocorrectionTypeYes;
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
textField.autocapitalizationType = UITextAutocapitalizationTypeSentences;
textField.returnKeyType = UIReturnKeyDone;
textField.tag = textFieldTag;
textField.delegate = self;

[self.scrollView addSubview:textField];

// Update the contentSize to include the new text field.
CGFloat width = self.scrollView.bounds.size.width;
CGFloat height = CGRectGetMaxY(textField.frame);
self.scrollView.contentSize = CGSizeMake(width, height);

注意:

  • 不要使用new启动变量或方法。它具有特殊含义,您会混淆其他Objective-C开发人员和/或编译器。
  • textField.tag = …[textfield setTag:…];相同您似乎喜欢其他地方的点语法,所以我切换到了。
  • 我假设您不希望滚动视图向左和向右平移,因此我将内容宽度固定到滚动视图的宽度。