【问题标题】:There is no Label when I try to set it programmatically当我尝试以编程方式设置标签时没有标签
【发布时间】:2021-11-02 10:46:38
【问题描述】:

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

DetailViewController:

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
}


}

【问题讨论】:

    标签: ios swift uiview uiviewcontroller


    【解决方案1】:

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

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

    view.addSubview(firstAndLastNameLabel)
    

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

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

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

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

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

    【讨论】:

    • 现在一切正常。标签隐藏在顶部栏后面,所以我只是更改了顶部锚点,现在可见。感谢您的帮助,关于 UI 和文章的课程。
    猜你喜欢
    • 1970-01-01
    • 2016-02-19
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多