UINavigationController + 状态栏框架的CGRect

CGRect for frame of UINavigationController + Status Bar

我正在努力在 NavigationBar 后面添加渐变。我将 UINavigationController 子类化来这样做。渐变应填充状态栏和 UINavigationBar。问题是我只能让它填充 UINavigationBar(通过 self.toolBar.bounds)。 我尝试添加状态栏的高度,但它不允许 +

@IBOutlet weak var toolBar: UINavigationBar!

let gradient:CAGradientLayer = CAGradientLayer()
gradient.frame = self.toolBar.bounds
gradient.colors = [UIColor.greenColor().CGColor, UIColor.blueColor().CGColor]
self.toolBar.layer.insertSublayer(gradient, atIndex: 1)
toolBar.barTintColor = UIColor.grayColor()

这是上面代码生成的屏幕截图:

渐变应该延伸到状态栏,所以不会有 grayColor。

你也可以为渐变提供图像:

[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"gradiant_bg"]]];

如果状态栏存在,您正在将渐变设置为 UINavigationBar. Navigation bar's size is44and it's y position is20`。因此,如果您将渐变设置为导航栏,那么肯定只会设置它。它绝对不会影响状态栏,因为它是不同的东西。

在您的情况下,我认为您应该使用 UIView.

制作自定义导航栏

只需隐藏特定此视图控制器的默认导航栏,并将大小为 64 的 uiview 拖动到 (0,0),这样它就会同时覆盖状态栏和导航栏 space。

然后为该视图设置渐变,您将获得想要的效果。

希望这会有所帮助:)