【问题标题】:Not seeing all views in views using views.addSubviews使用views.addSubviews 看不到视图中的所有视图
【发布时间】:2018-02-01 11:30:13
【问题描述】:

我在 iPad 上遇到了一个基本的视图问题。我有一个视图控制器。该视图使用带有全屏图像的 UIImageView 作为背景图像。我正在尝试在顶部覆盖标签。如果我单独设置标签,两个视图都会显示。如果我调用具有相同信息的函数,则只会显示一个视图。我需要扩展它很多标签。代码如下:

class ViewController: UIViewController {

@IBOutlet weak var backGroundImageView: UIImageView!
var cFrame:[CGRect?] = [CGRect?](repeating: nil, count: 13)
var offsets:[CGRect?] = [CGRect?](repeating: nil, count: 13)
var labels: [UILabel?] = [UILabel?](repeating:UILabel(), count:13)


override func viewDidLoad() {
    super.viewDidLoad()
    cFrame[0] = CGRect(x:450,y:530,width:251,height:68)
    cFrame[1] = CGRect(x:147,y:676,width:222,height:24)

    loadFrameValues()


    var frame = CGRect(x: 450, y: 520, width: 251, height: 68)
    let label0 = UILabel(frame: frame)
    label0.backgroundColor = .white
    label0.numberOfLines = 0
    label0.lineBreakMode = .byWordWrapping
    label0.textAlignment = .center
    label0.text = "Text 1"

    frame = CGRect(x: 152, y: 686, width: 210, height: 16)
    let label1 = UILabel(frame: frame)

    label1.backgroundColor = .cyan
    label1.lineBreakMode = .byWordWrapping
    label1.textAlignment = .left
    label1.text = "Text 2"
    label1.font = label1.font.withSize(12)

    backGroundImageView.addSubview(label0)
    backGroundImageView.addSubview(label1)

   //        showView(label: labels[0]!, frame: cFrame[0]!)
     //        showView(label: labels[1]!, frame: cFrame[1]!)
    //        }



}

func showView(label: UILabel, frame:CGRect) {
    label.frame = frame
    label.backgroundColor = .white
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.textAlignment = .center
    label.text = "Syed Tariq"
    backGroundImageView.addSubview(label)

}

【问题讨论】:

  • 停止使用框架并开始使用约束只是一个建议。
  • 您可能添加了两个标签,但它们的框架相同?
  • 请显示您遇到问题的原始代码
  • 这是上面的代码。您可以在代码中看到框架规格(不是同一个框架),您在代码中看到的内容有效。当我替换函数 showView 时,它只显示第一个视图。另外,尝试添加到视图中。

标签: ios swift3 uiview


【解决方案1】:

您不能将子视图(在您的情况下为标签)添加到 UIImageView。因此,将标签作为子视图添加到图像视图的父视图中。

override func viewDidLoad() {
    cFrame[0] = CGRect(x:50,y:130,width:151,height:68)
    cFrame[1] = CGRect(x:114,y:276,width:122,height:24)
    showView(frame: cFrame[0]!)
    showView(frame: cFrame[1]!)
}

func showView(frame:CGRect) {
        let label = UILabel(frame: frame)
        label.backgroundColor = .green
        label.numberOfLines = 0
        label.lineBreakMode = .byWordWrapping
        label.textAlignment = .center
        label.text = "Syed Tariq"
        self.view.addSubview(label)

}

【讨论】:

  • 没有什么不同,但无疑是正确的做法。
  • 编辑了上面的代码,运行良好。无需声明标签数组,并更改了 CGRect 框架,因为它已超出窗口。
  • 如果要定义标签数组,初始初始化为nil。从 showView 方法返回标签实例并将其附加到您的标签数组中。
猜你喜欢
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多