UILabel在更改设备方向后又变色

时间:2019-07-02 06:05:55

标签: ios swift uilabel uicolor

我在情节提要中创建了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
     }
 }

3 个答案:

答案 0 :(得分:1)

您可以在更改标签颜色后调用 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
        }
    }

答案 1 :(得分:0)

如果表在tableView或collectionView中 然后,您需要在cellWillDisplay中实现登录。

答案 2 :(得分:0)

实施viewDidLayoutSubviews方法。 ViewDidLayoutSubviews将被称为

  

当视图控制器的视图的边界改变时,视图将调整   子视图的位置,然后系统调用此方法。

override func viewDidLayoutSubviews() {
    label.textColor = UIColor.green
}