UINavigationController + 状态栏框架的CGRect
Posted
技术标签:
【中文标题】UINavigationController + 状态栏框架的CGRect【英文标题】:CGRect for frame of UINavigationController + Status Bar 【发布时间】: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 - 已经设置好了。灰色是在我的代码中明确设置的。 【参考方案1】:如果有状态栏,您将渐变设置为UINavigationBar. Navigation bar's size is
44and it's y position is
20`。因此,如果您将渐变设置为导航栏,那么它肯定只设置在它上面。它绝对不会影响状态栏,因为它是不同的东西。
在您的情况下,您应该使用UIView
制作自定义导航栏。
只需隐藏特定此视图控制器的默认导航栏并将大小为64
的uiview 拖到(0,0)
,这样它就可以覆盖状态栏和导航栏空间。
并为该视图设置渐变,您将获得所需的效果。
希望这会有所帮助:)
【讨论】:
这是有道理的。我没想过这样做。创建自己的导航栏在 Xcode / swift 中很常见吗? 是的,这很常见。大多数人使用这样的自定义导航栏 我目前正在将我的 UITableViewController 嵌入到导航控制器中。如果我要制作自己的视图作为导航栏,我是否不再需要嵌入导航控制器?我可以删除嵌入式导航控制器,然后手动设置约束,对吗? 不,您需要导航控制器在其上推送和弹出视图控制器。维护导航堆栈。您只需使用自定义视图而不是导航栏并隐藏原始视图。 感谢您的提示。您是否有任何 *** 链接在分步过程中对此进行了解释?【参考方案2】:您也可以为渐变提供图像:
[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"gradiant_bg"]]];
【讨论】:
以上是关于UINavigationController + 状态栏框架的CGRect的主要内容,如果未能解决你的问题,请参考以下文章
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller
带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr
从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)