带有dynamic内容的UIScrollView

我试图实现一个UIScrollView ,但每个教程在那里处理预设数量的项目。

我有什么是多个UITextField的,但文本字段的数量不同。 基本上,只要一个文本字段包含文本,另一个空的文本字段出现在它下面,允许用户填写无限数量的文本字段。

我的代码只要用户input某个东西,就会创build一个新的文本框。 这个x-coordinates与前一个一样,但是新y-coordinatesy-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]; 

故事板:

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

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

它在模拟器中的外观如何:

当您在文本框中输入文本时,会发生这种情况:

当您在文本框中input文本时,会发生这种情况:

一个空的文本框出现在前一个下面

一个空的文本框出现在前一个下面。

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

你不能再看到新的文本框,因为它在scrollView下面

你不能再看到新的textField,因为它低于scrollView的边界。 你也不能滚动来揭示它。


有谁知道如何解决这个问题? 如果你有时间,你将如何做到这一点,滚动视图自动向下滚动,以显示已添加的新文本框?

任何帮助是极大的赞赏! 谢谢!

contentSize需要是滚动视图中包含的内容的大小。

如果contentSizebounds.size ,那么可以向左和向右滚动。 如果contentSizebounds.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方法启动variables或方法。 它有特殊的含义,你会混淆其他Objective-C开发人员和/或编译器。
  • textField.tag = …[textfield setTag:…]; 你似乎喜欢在其他地方的点语法,所以我转向了这一点。
  • 我假设你不希望滚动视图左右平移,所以我固定的内容宽度滚动视图的宽度。