【问题标题】:CGRect for frame of UINavigationController + Status BarUINavigationController + 状态栏框架的CGRect
【发布时间】:2016-06-01 07:09:48
【问题描述】:

我正在努力在我的 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。

【问题讨论】:

  • 你可以尝试设置 UIStatusBarStyleLightContent 属性来去除灰色
  • @JP_Mob - 已经设置好了。灰色是在我的代码中明确设置的。

标签: ios swift uinavigationcontroller uinavigationbar cagradientlayer


【解决方案1】:

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

在您的情况下,您应该使用UIView 制作自定义导航栏。

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

并为该视图设置渐变,您将获得所需的效果。

希望这会有所帮助:)

【讨论】:

  • 这是有道理的。我没想过这样做。创建自己的导航栏在 Xcode / swift 中很常见吗?
  • 是的,这很常见。大多数人使用这样的自定义导航栏
  • 我目前正在将我的 UITableViewController 嵌入到导航控制器中。如果我要制作自己的视图作为导航栏,我是否不再需要嵌入导航控制器?我可以删除嵌入式导航控制器,然后手动设置约束,对吗?
  • 不,您需要导航控制器在其上推送和弹出视图控制器。维护导航堆栈。您只需使用自定义视图而不是导航栏并隐藏原始视图。
  • 感谢您的提示。您是否有任何 StackOverflow 链接在分步过程中对此进行了解释?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多