在状态栏上添加渐变层并为不同的视图控制器使其变亮或变暗后,在导航中的某个随机点,缺口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)}
}
}
答案 0 :(得分:1)
您正在UILabel上使用扩展名,该扩展名覆盖了intrinsicContentSize
。 (或者您可能使用了这种方法)因此状态栏时钟标签将其触发,并导致错误的internalContentSize。尝试使用此覆盖的方法修复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
}
答案 1 :(得分:0)