我的当事人的要求如下:
我将用大约15 textFields创建注册表单(在服务器上预定义)。注册字段中的字段信息来自服务器。在某些情况下,可能不需要某些字段。因此,我将得到该特殊情况所需的字段。
假设没有。服务器上的预定义字段为15。即FirstName、LastName、电话号码、出生日期、图片、电子邮件、地址、邮政编码等。
但在某些情况下,可能不需要电子邮件id字段。所以我不会从服务器上得到那个字段。因此,应用程序端我必须隐藏电子邮件文本框,使其不受预定义字段列表的影响。
此外,也有可能不需要多个字段(任何字段)。所以我也得把它们藏起来。我试图通过图像表示来解释情况如下。
案例1:

案例2:

在本例中,我所做的是(应用程序端)为所有预定义字段创建textFields。然后我隐藏了textfield,这是服务器响应所不需要的。即电子邮件、文本字段或任何其他textfield。
现在我的问题是,如果不需要任何字段,那么应该重新定位textfields,并且在我的应用程序中使用自动布局。我正在隐藏电子邮件文本框,那么如何设置下一个文本框的位置,如联系人号、出生日期等?
发布于 2015-09-11 07:02:58
是的,这是完全可能的自动布局。
这里最重要的是:
您不需要手动重新定位它,此工作将由自动布局完成。
你必须做以下事情:
UIScrollView并在其中添加所有UITextField。这样,内容大小和变化的位置将很容易管理。在这里,scrollView的内容大小也是由自动布局管理的,所以不要手动进行。UITextField分配帧。例如,在创建CGRect时使用textField。UITextFields添加约束,并最初将hidden属性设置为No/False。从服务器响应和查询中,只需调用下面的方法,就可以使它们可见并更新自动布局约束。
//根据您的响应/.更改隐藏属性/.//下面的方法将更新自动布局textField layoutIfNeeded;self.view layoutIfNeeded;
您可以将这些方法放在动画块中,以获得充分的UI体验。注意:记住VFL不是一个容易的部分,当你使用它的时候你必须小心。
添加示例代码可以帮助您(但它是在Swift中转换它在目标C中),而且VFL的参数和值也可能有变化,因为这段代码符合我的要求。看一看,并根据你的需要改变它。
使用VFL:UIScrollView创建:
// Create scrollview to display content
self.scrollView = UIScrollView()
self.scrollView.delegate = self
self.scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(self.scrollView)
// Visual formatting constraints of scrollview horizontal-vertical alignment with respect to view
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["scrollView" : scrollView]))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["scrollView" : scrollView]))UITextField UIScrollView**:**中的添加
func createRegistrationControls() {
var previousTextField : UITextField! = nil
// Remove all pervious views.
for view in self.scrollView.subviews {
view.removeFromSuperview()
}
for <YOUR NO OF TEXTFIELDS CONDITION> {
let textField : UITextField! = UITextField()
textField.borderStyle = UITextBorderStyle.RoundedRect
textField.font = UIFont.systemFontOfSize(14)
textField.clearButtonMode = UITextFieldViewMode.WhileEditing
textField.setTranslatesAutoresizingMaskIntoConstraints(false)
textField.delegate = self
self.scrollView.addSubview(textField)
// Left constraint
self.scrollView.addConstraint(NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.scrollView, attribute: NSLayoutAttribute.Left, multiplier: 1.0, constant: 10))
// Right constraint
self.scrollView..addConstraint(NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.scrollView, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: -10))
// TOP Horizontal constraint
let metrices = ["width" : self.view.bounds.width]
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[textField(width)]", options: NSLayoutFormatOptions(0), metrics: metrices, views: ["textField" : textField]))
if previousTextField == nil {
// Top vertical constraint
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[textField]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["textField" : textField]))
} else {
// Top constraint to previous view
self.scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[previousTextField]-(10)-[textField]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["textField" : textField, "previousTextField" : previousTextField]))
}
previousTextField = textField
}
if previousTextField != nil {
// This below constraints will increase UIScrollView content size
let constraint1 = NSLayoutConstraint.constraintsWithVisualFormat("H:[previousTextField]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["previousTextField" : previousTextField])
self.scrollView.addConstraints(constraint1)
let constraint2 = NSLayoutConstraint.constraintsWithVisualFormat("V:[previousTextField]|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["previousTextField" : previousTextField])
self.scrollView.addConstraints(constraint2)
}
}发布于 2016-06-09 14:00:47
只需将这些textFields的高度约束设为零。
textFieldHeightConstraint.constant = 0;https://stackoverflow.com/questions/32517069
复制相似问题