在外部屏幕内移动标签

Moving Labels within External Screen

我想在外接显示器上随意移动标签。 (例如,顶部的 displayRunsLabel 居中或距离右侧和顶部 40 像素)

我的标签显示在屏幕上。我目前正在使用文本对齐方式。

最好的方法是什么?

这是我的外接显示器:

外部显示屏幕截图

代码如下:

 // CUSTOMISE VIEW
        secondScreenView.backgroundColor = UIColor.black
        displayWicketLabel.textAlignment = NSTextAlignment.left
        displayWicketLabel.font = UIFont(name: "Arial-BoldMT", size: 200.0)
        displayWicketLabel.textColor = UIColor.white
        displayWicketLabel.frame = secondScreenView.bounds
        secondScreenView.addSubview(displayWicketLabel)
        displayRunsLabel.textAlignment = NSTextAlignment.center
        displayRunsLabel.font = UIFont(name: "Arial-BoldMT", size: 200.0)
        displayRunsLabel.textColor = UIColor.white
        displayRunsLabel.frame = secondScreenView.bounds
        secondScreenView.addSubview(displayRunsLabel)
        displayOversLabel.textAlignment = NSTextAlignment.right
        displayOversLabel.font = UIFont(name: "Arial-BoldMT", size: 200.0)
        displayOversLabel.textColor = UIColor.white
        displayOversLabel.frame = secondScreenView.bounds
        secondScreenView.addSubview(displayOversLabel)
    }

标签或任何其他 UIView 的位置是其 frameorigin,这是表示其左上角的 CGPoint。

所以,你现在说的是:

    displayWicketLabel.frame = secondScreenView.bounds
    displayRunsLabel.frame = secondScreenView.bounds
    displayOversLabel.frame = secondScreenView.bounds

好吧,这很愚蠢,因为您给所有三个标签都赋予了相同的框架!因此它们相互重叠,并且(正如您所说的那样)您只能通过给它们不同的文本对齐方式来阅读它们。

相反,给他们每个人一个不同的框架——一个把标签放在你想要的地方的框架。例如:

    displayWicketLabel.sizeToFit()
    displayWicketLabel.frame.origin = CGPoint(x:30, y:20) // or whatever
    displayRunsLabel.sizeToFit()
    displayRunsLabel.frame.origin = CGPoint(x:30, y:100) // or whatever
    displayOversLabel.sizeToFit()
    displayOversLabel.frame.origin = CGPoint(x:30, y:200) // or whatever

现在,说了这么多,我刚才向您展示的代码中的一个明显缺陷是我们任意对位置进行了硬编码,而没有考虑 window 的大小(外接显示器)。出于这个原因,更好的方法是让您了解自动布局,它可以让您根据 [=26] 的大小 自动 将三个标签放在合适的位置=].