在我的应用程序中,我想添加一个或多个UITextFields并点击按钮。我可以在自定义UIView(在Storyboard中预定义)中创建UITextFields,但是我无法正确地向文本字段添加约束和UIView对Button的约束(按钮位于UIView下)。因此,对于每个按钮单击,我想使用给定的约束调整UIView的大小,并在添加文本字段后向下移动按钮。现在我使用此代码,它成功添加了文本字段,但约束不起作用:
@IBAction func addCustomTextField(sender: AnyObject) {
let x : CGFloat = 20
var y : CGFloat = 10
let width : CGFloat = 300
let height : CGFloat = 40
var lastButtonY : Int? = NSUserDefaults.standardUserDefaults().integerForKey("lastButtonY")
if lastButtonY > 0 {
y = CGFloat.init(lastButtonY! + 8)
NSUserDefaults.standardUserDefaults().setObject(y + height, forKey: "lastButtonY")
} else {
NSUserDefaults.standardUserDefaults().setObject(10 + height, forKey: "lastButtonY")
}
sampleTextField = UITextField(frame: CGRectMake(x, y, width, height) )
sampleTextField.placeholder = "Enter text here"
sampleTextField.font = UIFont.systemFontOfSize(15)
sampleTextField.borderStyle = UITextBorderStyle.RoundedRect
sampleTextField.autocorrectionType = UITextAutocorrectionType.No
sampleTextField.keyboardType = UIKeyboardType.Default
sampleTextField.returnKeyType = UIReturnKeyType.Done
sampleTextField.clearButtonMode = UITextFieldViewMode.WhileEditing;
sampleTextField.contentVerticalAlignment = UIControlContentVerticalAlignment.Center
self.customView.addSubview(sampleTextField)
let bottomConstraintForTextField = NSLayoutConstraint(item: sampleTextField, attribute: .Bottom, relatedBy: .Equal, toItem: customView, attribute: .Bottom, multiplier: 1, constant: 10)
let bottomConstraintForCustomView = NSLayoutConstraint(item: customView, attribute: .Bottom, relatedBy: .Equal, toItem: addButton, attribute: .Bottom, multiplier: 1, constant: 10)
NSLayoutConstraint.activateConstraints([bottomConstraintForTextField, bottomConstraintForCustomView])
}
答案 0 :(得分:0)
正如UlyssesR所述,您可以使用tableView
并轻松处理插入。
但是如果你想让它以这种方式工作,那么首先,你没有指定足够的约束来保持视图的位置。
基本上,指定底部约束只会识别视图的y位置。所以没有x位置,宽度或高度等的指示。
为了使它起作用,你必须提供足够的约束。每个视图可能大约4个。这实际上取决于约束和要求。
因此,在您的情况下,您可以添加width
,height
和centerX
约束来保存视图。
每当您尝试以编程方式设置约束时,请不要忘记为要应用约束的每个视图设置translatesAutoresizingMaskIntoConstraints
到false
。如果约束不影响父视图,请不要设置为父视图。
此外,如果您不熟悉AutoLayouts,我建议您通过Apple's documentation for autolayouts
RayWenderLich中有自动布局教程。