我在故事板中创建了一个UIViewController。有一个UILabel色的红色。在一些活动之后,我将标签上的文本更改为textColor,改为绿色。
奇怪的是:当我更改设备方向标签时,它的textColor会像开始时一样变回红色,但是文本会保持不变。
如何在设备旋转后标签上的textColor保持绿色?
class ViewController: UIViewController {
@IBOutlet private weak var volumeButton: UIButton!
@IBOutlet private weak var clLabel: UILabel!
override var traitCollection: UITraitCollection {
if view.bounds.width < view.bounds.height {
let traits = [UITraitCollection(horizontalSizeClass: .compact), UITraitCollection(verticalSizeClass: .regular)]
return UITraitCollection(traitsFrom: traits)
} else {
let traits = [UITraitCollection(horizontalSizeClass: .regular), UITraitCollection(verticalSizeClass: .compact)]
return UITraitCollection(traitsFrom: traits)
}
}
@IBAction private func handleInputVolume(_ sender: UIButton) {
coordinator?.inputData(type: .volume, delegate: self)
}
}
extension ViewController: InputDataReceivable {
func didFinishInput(volume: Double) {
volumeButton.setTitle(volume.formattedString, for: .normal)
volumeButton.setTitleColor(.enabledGreen, for: .normal)
clLabel.textColor = .enabledGreen
}
}发布于 2019-07-02 06:53:40
实现viewDidLayoutSubviews方法。ViewDidLayoutSubviews将被调用
当视图控制器的视图的边界发生变化时,视图将调整其子视图的位置,然后系统调用此方法。
override func viewDidLayoutSubviews() {
label.textColor = UIColor.green
}发布于 2019-07-02 06:41:42
在更改标签颜色后,您可以在调用self.view.layoutIfNeeded()之后检查它。如果它不起作用,那么使用下面的代码,当您的方向发生变化时,只需以编程方式再次更改标签颜色。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if(size.width > self.view.frame.size.width){
//Landscape
yourLabel.textColor = UIColor.green
}
else{
//Portrait
yourLabel.textColor = UIColor.green
}
}
发布于 2019-07-02 06:30:18
如果表位于tableView或collectionView中,则需要在cellWillDisplay中实现登录。
https://stackoverflow.com/questions/56846255
复制相似问题