以编程方式添加子视图

时间:2015-11-05 14:50:45

标签: ios swift2

我想以编程方式添加一组UITextField。 UITextFields的数量不知道,它将在For循环中创建。我可以执行此操作,但问题是创建UILabel放在彼此之上。如何放置一些放在彼此之下的约束。

目前我的代码如下:

For Loop...
{
  let Description = UILabel(frame: CGRectMake(20, 100, 300, 40))
                    Description.font = UIFont.systemFontOfSize(18)
  ...
  self.view.addSubview(Description)
  // StackView.addSubview(Description)  
  // I TRIED ADDING A STACK VIEW BUT HAD THE SAME EFFECT.
}

4 个答案:

答案 0 :(得分:2)

尝试这个

 var y = 100
    For Loop...
        {
                        let Description = UILabel(frame: CGRectMake(20, y, 300, 40))
    y = Description.Frame.size.height
                        Description.font = UIFont.systemFontOfSize(18)
    ...


        self.view.addSubview(Description)

        // StackView.addSubview(Description)  // I TRIED ADDING A STACK VIEW BUT HAD THE SAME EFFECT.


        }

答案 1 :(得分:1)

创建CGRect时必须增加Y值。

将Y值存储在int变量上,并在每次迭代时将其增加到buttonHeight + desiredMargin。

希望这有帮助。

答案 2 :(得分:1)

喜欢

<强>步骤1

最初创建Y坐标并根据需要设置高度

  var y : CGFloat = 3

<强>步骤-2

 for var index1:Int = 0 ; index1 < yourArray.count ; index1++
            {

                        let timerLbl:UILabel = UILabel(frame: CGRectMake(5, y, self.view.frame.size.width, 35)) //UILabel(frame: CGRectMake(50, y, self.view.frame.size.width, 35))
                        timerLbl.textAlignment = .Center
                        timerLbl.textColor = UIColor.clearColor() 
                        timerLbl.text = "00:00"
                        timerLbl.tag =  index1 
                        self.view.addSubview(timerLbl)

                    // continue the other lables

                       // the following line increment your height 
                        y = y + 10 
                    }

答案 3 :(得分:1)

我不在家,但你应该使用类似的代码:

var yRect : CGFloat = 100
let padding : CGFloat = 20
For Loop...
    {
     let Description = UILabel(frame: CGRectMake(20, yRect, 300, 40))
                    Description.font = UIFont.systemFontOfSize(18)
yRect += 40
...

self.view.addSubview(Description)
}