以编程方式在Swift中向Message App添加标签?

时间:2016-09-16 22:59:22

标签: ios swift message swift3 ios10

我知道iOS10和所有这些都是新的,但我正在尝试构建一个简单的ms messageappextension应用程序,我发现的所有教程都通过故事板添加了标签,按钮等。

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

//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在全视图中时,这是有效的:

enter image description here

然而,当它像这样,即使中心的位置是基于view.bounds,当视图在这里缩小时,标签仍然显示在视图之外:

enter image description here

我发现当尺寸改变时会调用它,但是即使重置中心也不会做任何事情:

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 个答案:

答案 0 :(得分:0)

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

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

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