我正在使用一个仅支持纵向的应用程序,我需要以横向显示标签,因此我旋转了标签中的文本,但是标签的位置发生了变化,如何在不改变标签位置的情况下旋转文本标签,标签的位置不应该改变,它应该与第一个屏幕截图中的相同。输出应该像最后一个图像。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
rotateLabel(radians: CGFloat.pi/2)
}
func rotateLabel(radians: CGFloat){
rotateLabel.transform = CGAffineTransform(rotationAngle: radians)
}
您应该首先创建一个带有框架的标签,如第二个屏幕截图中的框架(宽度 > 高度),然后旋转它以获得如第一个屏幕截图中的框架(高度 > 宽度)。
let label = UILabel()
label.text = "The flower is beautiful"
label.backgroundColor = .yellow
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
NSLayoutConstraint.activate([
label.centerYAnchor.constraint(equalTo: view.centerYAnchor),
label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
// hardcoded widths and heights here
label.heightAnchor.constraint(equalToConstant: 40),
label.widthAnchor.constraint(equalToConstant: 400)
])
label.transform = CGAffineTransform(rotationAngle: .pi / 2)
如果你不想硬编码宽度,并且希望标签的宽度(旋转后变成“高度”)填充屏幕的整个高度,那么添加容器视图会更方便。容器视图将具有与第一个屏幕截图类似的框架,并且标签仍将具有与第二个屏幕截图类似的框架。这使您可以轻松地将标签的高度限制为容器的宽度,并将标签的宽度限制为容器的高度。
let label = UILabel()
label.text = "The flower is beautiful"
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.transform = CGAffineTransform(rotationAngle: .pi / 2)
let container = UIView()
container.backgroundColor = .yellow
container.addSubview(label)
container.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(container)
NSLayoutConstraint.activate([
container.centerXAnchor.constraint(equalTo: view.centerXAnchor),
container.widthAnchor.constraint(equalToConstant: 40),
container.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
container.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
label.centerXAnchor.constraint(equalTo: container.centerXAnchor),
label.centerYAnchor.constraint(equalTo: container.centerYAnchor),
label.widthAnchor.constraint(equalTo: container.heightAnchor),
label.heightAnchor.constraint(equalTo: container.widthAnchor),
])