在外部屏幕内移动标签
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 的位置是其 frame
的 origin
,这是表示其左上角的 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] 的大小 自动 将三个标签放在合适的位置=].
我想在外接显示器上随意移动标签。 (例如,顶部的 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 的位置是其 frame
的 origin
,这是表示其左上角的 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] 的大小 自动 将三个标签放在合适的位置=].