导航栏渐变背景图像是否在不同的模拟器设备上不一致?

时间:2018-08-21 05:48:16

标签: swift xcode uinavigationbar

我正在从渐变图层设置导航栏背景图像,如下所示:

首先,我在Util.swift中声明了一个全局渐变层

let lightBlueToBlueGradientLayer: CAGradientLayer = {
    let layer = CAGradientLayer()
    layer.colors = [
        UIColor(red: 29/255, green: 172/255, blue: 235/255, alpha: 1).cgColor,
        UIColor(red: 17/255, green: 116/255, blue: 187/255, alpha: 1).cgColor]
    return layer
}()

然后我将导航栏背景图像设置为渐变层

let navBackgroundImageGradient = lightBlueToBlueGradientLayer 

func configureNavBar(){
    let nav = self.navigationController?.navigationBar
    navBackgroundImageGradient.frame = (nav?.bounds)!
    navBackgroundImageGradient.startPoint = CGPoint(x: 1.0, y: 0.5)
    navBackgroundImageGradient.endPoint = CGPoint(x: 0.0, y: 1.0)
    nav?.setBackgroundImage(self.image(fromLayer: navBackgroundImageGradient), for: .default)
    nav?.tintColor = .white
}

func image(fromLayer layer: CAGradientLayer) -> UIImage{
    UIGraphicsBeginImageContext(layer.frame.size)
    layer.render(in: UIGraphicsGetCurrentContext()!)
    let outputImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return outputImage!
}

我有一个Iphone 6物理设备,并且已经对其进行了测试,看起来还可以。 但是由于我的项目必须针对不同的iOS设备,所以我想使用模拟器进行测试,并且我注意到了这一点。

我的Iphone 8模拟器导航截图 iphone 8 simulator nav screenshot

我的Iphone X模拟器导航屏幕截图iphone X simulator nav screenshot

很明显,我没有iPhone 8 ...要对iPhone X物理设备进行全面测试,但我注意到在模拟器中,屏幕较小的设备往往会发生这种情况。 (例如,iphone8,iphone 4s等。)

现在我的问题是,这仅仅是模拟器错误还是在真实设备上也会发生? (或者我的代码有问题吗?)

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要通过添加状态栏高度来更改导航高度。

let nav = self.navigationController?.navigationBar
nav?.frame.size.height += UIApplication.shared.statusBarFrame.height

让iOS决定提高iPhone(iPhone 5/6/7/8或iPhone X)的高度

相关问题