如何旋转标签中的内容

问题描述 投票:0回答:1

我正在使用一个仅支持纵向的应用程序,我需要以横向显示标签,因此我旋转了标签中的文本,但是标签的位置发生了变化,如何在不改变标签位置的情况下旋转文本标签,标签的位置不应该改变,它应该与第一个屏幕截图中的相同。输出应该像最后一个图像。

 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)
    
}

swift objective-c swiftui uilabel core-graphics
1个回答
0
投票

您应该首先创建一个带有框架的标签,如第二个屏幕截图中的框架(宽度 > 高度),然后旋转它以获得如第一个屏幕截图中的框架(高度 > 宽度)。

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),
])

© www.soinside.com 2019 - 2024. All rights reserved.