带有dynamic内容的UIScrollView
我试图实现一个UIScrollView
,但每个教程在那里处理预设数量的项目。
我有什么是多个UITextField
的,但文本字段的数量不同。 基本上,只要一个文本字段包含文本,另一个空的文本字段出现在它下面,允许用户填写无限数量的文本字段。
我的代码只要用户input某个东西,就会创build一个新的文本框。 这个x-coordinates
与前一个一样,但是新y-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];
故事板:
在这里,您可以看到我如何将原始文本字段放在我的滚动视图中
它在模拟器中的外观如何:
当您在文本框中input文本时,会发生这种情况:
一个空的文本框出现在前一个下面。
但是,当您超过ScrollView时,会发生这种情况
你不能再看到新的textField,因为它低于scrollView的边界。 你也不能滚动来揭示它。
有谁知道如何解决这个问题? 如果你有时间,你将如何做到这一点,滚动视图自动向下滚动,以显示已添加的新文本框?
任何帮助是极大的赞赏! 谢谢!
contentSize
需要是滚动视图中包含的内容的大小。
如果contentSize
比bounds.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
方法启动variables或方法。 它有特殊的含义,你会混淆其他Objective-C开发人员和/或编译器。 -
textField.tag = …
与[textfield setTag:…];
你似乎喜欢在其他地方的点语法,所以我转向了这一点。 - 我假设你不希望滚动视图左右平移,所以我固定的内容宽度滚动视图的宽度。