首页 > 解决方案 > 当我尝试以编程方式设置标签时没有标签

问题描述

我是以编程方式制作 UI 的新手。我想在单击单元格行后创建一个新视图并在那里显示一个标签,但是当应用程序转到该视图时,除了白屏之外什么都没有。有谁知道如何解决我的问题?

细节视图控制器:

class DetailViewController: UIViewController {

var data: DataModel!
var firstAndLastNameLabel = UILabel()
let contentView = UIView()
let scrollView = UIScrollView()

override func viewDidLoad() {
    super.viewDidLoad()
    print("DETAIL VIEW CONTROLLER: \(String(describing: data))")
    view.backgroundColor = .white
    self.view.addSubview(firstAndLastNameLabel)
   
    set()
    setFirstAndLastNameLabel()
}

func set() {
    firstAndLastNameLabel = UILabel(frame: CGRect(x: 10, y: 50, width: 150, height: 35))
    firstAndLastNameLabel.center = CGPoint(x: 160, y: 260)
    firstAndLastNameLabel.text = "\(data.firstName) \(data.lastName)"
}

func configureFirstAndLastNameLabel() {
    firstAndLastNameLabel.numberOfLines = 0
}


}

标签: iosswiftuiviewuiviewcontroller

解决方案


当您以编程方式创建新视图时,您还需要将其作为子视图添加到其他视图中。

在这种情况下,它可以是您的视图控制器视图:

view.addSubview(firstAndLastNameLabel)

或者,您可以根据需要添加contentView到控制器视图,然后将标签添加到contentView。在这种情况下,您还需要添加框架contentView

view.addSubview(contentView)
contentView.addSubview(firstAndLastNameLabel)

有点题外话。拥有静态框架根本不是一个好主意,因为您的 UI 在不同的设备上看起来会完全不同。

最方便的方法是使用布局约束——与您在情节提要中使用的相同。查看这篇文章,了解如何以编程方式使用它们。

如果你想使用原始帧,你必须在里面做viewDidLayoutSubviews:在那里你可以获得控制器视图的实际大小并相应地计算嵌套视图的帧。


推荐阅读