Прежде чем начать, я посетил Как выровнять текст внутри textView по вертикали? и Как можно повернуть текст для UIButton и UILabel в Swift? и многих других местах, но ни одногоОтветы, изложенные в приведенных выше ссылках (или в любом другом месте, где я был), решают мою проблему.Итак, вот как это происходит:
Я пытаюсь отобразить текст в UILabel по вертикали после того, как устройство изменится на альбомную / книжную.
Мне удалось (принудительно) сложить их вертикально, изменивего размер кадра и установка numberOfLines = 0.
Этот вид дает желаемый результат, за исключением того, что я получаю пробелы между каждым символом после поворота, значительно удлиняя слово.
Пожалуйста, проверьте изображениениже, чтобы получить лучшее представление о том, что я испытываю.
Пробелы между символами
В идеале, после вращения не было бы лишних пробелов, и было бы неплохои компактный, как в Portrait.
Кто-нибудь знает, как мне этого добиться?В моем примере я использую UILabel, но ответ, использующий UITextView, тоже подойдет, если он работает.Ниже мой код:
import UIKit
class ViewController: UIViewController {
var _W = CGFloat()
var _H = CGFloat()
var wordLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
_W = UIApplication.shared.statusBarOrientation.isPortrait ? view.frame.width : view.frame.height
_H = UIApplication.shared.statusBarOrientation.isPortrait ? view.frame.height : view.frame.width
wordLabel = UILabel()
wordLabel.text = "Text"
view.addSubview(wordLabel)
formatLabel(label: wordLabel, fontSize: 64, color: UIColor.magenta, tag: 1)
}
func formatLabel(label: UILabel, fontSize: CGFloat, color: UIColor, tag: Int) {
label.font = UIFont.boldSystemFont(ofSize: fontSize)
label.textColor = color
label.tag = tag
label.textAlignment = .center
label.adjustsFontSizeToFitWidth = true
label.numberOfLines = 0
positionView(label, isPortrait: UIApplication.shared.statusBarOrientation.isPortrait)
}
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
positionView(wordLabel, isPortrait: !UIApplication.shared.statusBarOrientation.isPortrait)
}
func positionView(_ view: UIView, isPortrait: Bool) {
if (view.tag == 1) {
if (isPortrait) {
wordLabel.frame = CGRect(x: 0, y: 0, width: _W, height: 80)
wordLabel.center = CGPoint(x: _W/2, y: (_H - _W)/4)
} else {
wordLabel.frame = CGRect(x: 0, y: 0, width: 50, height: _W)
wordLabel.center = CGPoint(x: (_H - _W)/4, y: _W/2)
}
}
}
}