【问题标题】:Status Bar clock has been truncated on iPhoneXiPhone 上的状态栏时钟已被截断
【发布时间】:2019-05-28 21:53:16
【问题描述】:

在状态栏添加渐变层并为不同的视图控制器使其变亮或变暗后,在导航中的某个随机点,我在缺口 iPhone 状态栏中的时钟已被截断。像 1... 或 ...

我已经尝试了这两种解决方案来使状态栏内容变白;但这对这种随机时钟行为没有影响。

这个:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.barStyle = .blackOpaque
        self.setNeedsStatusBarAppearanceUpdate()
}

或者这个:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

它们都改变了我的状态栏内容颜色。关于导致这种行为的原因有什么想法吗???

这就是我使状态栏渐变的方式:

extension UIViewController {
    func makeStatusBarGradient(){
        let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
        let gradientLayer1 = CAGradientLayer()
        gradientLayer1.frame = statusBarView.frame
        gradientLayer1.colors = [UIColor.APColors.redGradient.cgColor, UIColor.APColors.orangeGradient.cgColor]
        gradientLayer1.startPoint = CGPoint(x: 0.0, y: 0.5)
        gradientLayer1.endPoint = CGPoint(x: 1.0, y: 0.5)
        gradientLayer1.cornerRadius = 0
        gradientLayer1.zPosition = -10
        gradientLayer1.name = "gradient"
        //Change status bar color
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView{
            statusBar.layer.addSublayer(gradientLayer1)
        }
        setNeedsStatusBarAppearanceUpdate()
    }
    func clearStatusBarGradient(){
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView{
            if let layers = statusBar.layer.sublayers?.filter({$0.name == "gradient"}){
                if (layers.count > 0){
                    layers.first?.removeFromSuperlayer()
                }
            }
        }
        setNeedsStatusBarAppearanceUpdate()
    }
}

而且,APColors 是:

extension UIColor {
      struct APColors {
            static var redGradient : UIColor { return UIColor(red: 1.00, green: 0.42, blue: 0.24, alpha: 1) }
            static var orangeGradient : UIColor { return UIColor(red: 0.95, green: 0.19, blue: 0.42, alpha: 1)}

      }
}

【问题讨论】:

  • 您能分享一下如何将渐变颜色应用于状态 vbar 吗?
  • @EmreÖnder 已更新。

标签: ios swift statusbar clock iphone-x


【解决方案1】:

您在 UILabel 上使用扩展名,它覆盖了 intrinsicContentSize。 (或者你可能会调整这个方法)所以状态栏时钟标签会触发它并得到错误的intrinsicContentSize。尝试在此覆盖方法中修复 textSize 计算,或尽可能避免覆盖它。

我猜你正在使用流行的 SO 答案中的 UILabel+Padding,所以检查你是否有这个:

if let insets = padding {
  insetsWidth += insets.left + insets.right
  insetsHeight += insets.top + insets.bottom
  textWidth -= insetsWidth
}

如果你这样做了,那么只需改变它:

if let insets = padding {
  insetsWidth += insets.left + insets.right
  insetsHeight += insets.top + insets.bottom
  textWidth -= insetsWidth
} else {
  return contentSize
}

【讨论】:

  • 你猜我的代码给我留下了深刻的印象。优秀的答案。谢谢。 @虚幻开发者
【解决方案2】:

由于我不知道 APColor 是什么,所以我用下面的代码更改了行,一切正常。

gradientLayer1.colors = [UIColor.red.cgColor, UIColor.orange.cgColor]
  1. 尝试更改同一行并检查您的问题是否已解决。很可能,APColor 不会导致问题。

  2. 检查您是否有任何多个东西状态栏是否可用。例如指标等

  3. 如果您在状态栏中添加了其他任何内容,请告诉我。

输出

【讨论】:

  • 其实我大部分时间都还可以。但是在不同的页面中导航了一下,或者将应用程序最小化并再次恢复,甚至将手机再次锁定和解锁,问题就突然出现了。我找不到任何导致此问题的导航模式或顺序。
  • @AbbasSabeti 如果您不添加渐变,执行上述所有操作是否会遇到同样的问题?
  • 问题不在于渐变。使用状态栏背景颜色实现了相同的结果。
  • @AbbasSabeti 那么可能是它的设备问题。如果可能,请在其他设备中检查相同的内容。
  • 在 iPhone XS Max、iPhone X 和所有有缺口的 iOS 模拟器上都存在完全相同的问题。
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2011-04-04
  • 2017-06-22
  • 1970-01-01
  • 2014-11-16
相关资源
最近更新 更多