如何以编程方式在自定义 uiView 中创建 UIlabel swift

How to programmatically create UIlabel inside a custom uiView swift

如何在自定义 UIView 中创建 5 个自定义 uilabel。这将一个接一个地对齐。我试图在自定义 UIView 中创建 UILabel。但它不会进入自定义 UIView

//循环更新

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var mainView: UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var getMainViewX = mainView.frame.origin.x
    let getMainViewY = mainView.frame.origin.y

    for var i = 0; i < 5; i++
    {

        let label = UILabel(frame: CGRectMake(getMainViewX, getMainViewY, 200, 21))
        //label.center = CGPointMake(160, 284)
        label.textAlignment = NSTextAlignment.Center
        label.text = "I'am a test label"
        self.mainView.addSubview(label)
        getMainViewX+=20
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

如果您使用的是 iOS 9,则最近添加的 Stack View 正是为此目的而创建的。

  1. 为您的 mainView 使用 UIStackView 而不是默认视图
  2. 您可以在 Interface Builder 中设置堆栈视图的对齐属性
  3. 在循环中创建标签,然后使用堆栈视图的 addArrangedSubview 方法将它们添加到堆栈视图。

堆栈视图将为您处理其子视图的对齐、间距和布局。

不清楚你所说的 "align" 是什么意思。 假设您希望它们一层层堆叠,我已对您的代码进行了细微调整。

class ViewController: UIViewController {

@IBOutlet weak var mainView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let getMainViewX = mainView.frame.origin.x
    //let getMainViewY = mainView.frame.origin.y

    for var i = 0; i < 5; i++
    {
        //let label = UILabel(frame: CGRectMake(getMainViewX, getMainViewY, 200, 21))
        let label = UILabel(frame: CGRectMake(getMainViewX, CGFloat(i) * 21, 200, 21))
        //label.center = CGPointMake(160, 284)
        label.textAlignment = NSTextAlignment.Center
        label.text = "I'am a test label"
        self.mainView.addSubview(label)
        //getMainViewX+=20
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

Hopefully this is how you are looking to align the labels