如何以编程方式将textField添加到滚动视图

时间:2016-01-19 19:31:53

标签: swift uiview scroll uiscrollview

我的故事板上有一个按钮。此按钮位于视图内,该视图位于滚动视图内。

我想要做的事情听起来相对简单:当按下按钮时,按钮会向下移动一点,而textField会出现在按钮之前的位置。

然而,按钮动画会发生什么,但随后返回到原始位置,而不是保持移动,textField会按原样显示。

因为出现的textField的位置取决于按钮的位置,所以多次按下按钮只会将一堆文本字段放在一起。

以下是发生的事情的图片:

my Screen:

以下是按下按钮时我正在运行的代码:

@IBAction func addIngredientButtonPressed(sender:UIButton){

contentView.bounds.size.height += addIngredientLabel.bounds.height

scrollView.contentSize.height += addIngredientLabel.bounds.height


//Create Text Field and Set Initial Properties
let newIngredientTextField = UITextField(frame: CGRectMake(self.addIngredientLabel.frame.minX as CGFloat, self.addIngredientLabel.frame.midY as CGFloat, self.addIngredientLabel.bounds.width,self.addIngredientLabel.bounds.height * 0.60))

newIngredientTextField.font = UIFont.systemFontOfSize(15.0)
newIngredientTextField.placeholder = "ADD INGREDIENT HERE"
newIngredientTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Left

newIngredientTextField.alpha = 0.0

scrollView.addSubview(newIngredientTextField)



UIView.animateWithDuration(0.5) { () -> Void in

    self.addIngredientLabel.center.y += self.addIngredientLabel.bounds.height
    newIngredientTextField.alpha = 1.0

}

}

注意:**长度也会成功添加到屏幕上,但按钮不会保持移动状态。因此,在上面的屏幕截图中,您确实可以向上和向下滚动**

我注意到如果你注释掉前两行代码,那些为contentView和scrollView增加高度的代码,你几乎得到了正确的行为。按钮移动并保持移动,textField出现在正确的位置,但是如果你继续按下,它不会让你添加比屏幕大小更多的textFields。

这是一张如果你注释掉前两行会发生什么的图片。如果您继续按下该按钮,该按钮将不再执行任何操作:

screen filled:

我发现很多教程告诉你如何使用故事板添加更多内容而不是适合一个屏幕并将推断的指标设置为自由形式,但我没有发现任何人试图像我一样动态添加元素。 / p>

1 个答案:

答案 0 :(得分:0)

您似乎有一个contentView - 可能是您scrollView的直接子视图,但您将newIngredientTextField直接添加到scrollView而非您的contentView bounds.size.height

当您增加contentView的{​​{1}}时,它会将其frame.origin.y减少一半(以使其center保持在同一位置)。由于您的原始按钮可能是此contentView的子视图,因此会使其独立于新添加的文本字段移动。

换句话说,写:

contentView.frame.size.height += addIngredientLabel.bounds.height

而不是

contentView.bounds.size.height += addIngredientLabel.bounds.height

contentView.addSubview(newIngredientTextField)

而不是

scrollView.addSubview(newIngredientTextField)