以编程方式将标签添加到 Swift 中的消息应用程序?

Posted

技术标签:

【中文标题】以编程方式将标签添加到 Swift 中的消息应用程序?【英文标题】:Programmatically add label to Message App in Swift? 【发布时间】:2016-09-16 22:59:22 【问题描述】:

我知道这是 ios10 的新功能,但我正在尝试构建一个简单的 ms messageappextension 应用程序,并且我找到的所有教程都通过情节提要添加了它们的标签、按钮等。

我讨厌 autlayout 并且不使用故事板,所以我需要找到如何以编程方式添加元素。这是我尝试过的:

//main label
        pointsLabel.frame = CGRect(x: 0, y: 0, width: view.bounds.width * 0.5, height: view.bounds.height * 0.1)
        pointsLabel.center = CGPoint(x: view.bounds.width * 0.5, y: view.bounds.width * 0.7)
        pointsLabel.textColor = UIColor.red
        pointsLabel.textAlignment = .center
        pointsLabel.text = "Testing 123"
        pointsLabel.font = UIFont(name: "Helvetica", size: screenSize.height * (30/screenSize.height))

        view.addSubview(pointsLabel)

这是 Id 通常制作标签的方式,当 MSMessagesAppViewController 像这样在全视图中时可以使用:

但是当它这样即使center的定位是基于view.bounds的时候,当视图缩小到这里时,标签仍然显示在视图之外:

我发现当大小改变时会调用它,但是即使在这里重置中心也无济于事:

override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) 
        // Called before the extension transitions to a new presentation style.

        // Use this method to prepare for the change in presentation style.

        print(view.bounds.height)
        pointsLabel.center = CGPoint(x: view.bounds.width * 0.5, y: view.bounds.width * 0.7)
    

除了在不同高度之间来回切换之外,以编程方式添加标签的正确方法是什么?

【问题讨论】:

【参考方案1】:

更改您的中心计算以使用y 的超级视图的高度,而不是宽度的一部分:

pointsLabel.center = CGPoint(x: view.bounds.width * 0.5, y: view.bounds.height * 0.5)

虽然紧凑,但宽度实际上大于高度,因此view.bounds.width * 0.7 将您的标签推离了屏幕。

【讨论】:

以上是关于以编程方式将标签添加到 Swift 中的消息应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 以编程方式将 UIView 中的标签和图像居中对齐

在 swift 中以编程方式在堆栈视图中添加标签和文本视图

iOS Swift标签栏控制器以编程方式添加项目(新标签)

我们可以删除在 swift 上以编程方式添加的标签吗?

以编程方式将 UISearchController 添加到 swift 2 中的 UITableView 标头

Swift - 以编程方式创建的按钮和标签相互链接