gpt4 book ai didi

ios - 以编程方式添加一个与状态栏重叠的 UINavigationBar

转载 作者:行者123 更新时间:2023-12-01 17:39:07 24 4
gpt4 key购买 nike

我在 View Controller 中手动添加 UINavigationBar loadView .

我正在使用制图 (https://github.com/robb/Cartography) 通过自动布局来布局 View 。

self.edgesForExtendedLayout = UIRectEdge.None
let navBar = UINavigationBar()
navBar.delegate = self
view.addSubview(navBar)

constrain(navBar) { bar in
bar.top == bar.superview!.top
bar.centerX == bar.superview!.centerX
bar.width == bar.superview!.width
}

委托(delegate)方式:
public func positionForBar(bar: UIBarPositioning) -> UIBarPosition {
return .TopAttached
}

然而结果是小栏,而不是状态栏下的扩展版本。

最佳答案

如果您以编程方式添加导航栏,您需要注意 edgesForExtendedLayout并且任何条形定位 API 都不会与您界面的布局指南相关。由于您现在已经表明要管理此栏,因此系统无法强制它是否应该在状态栏下方。您需要做的是配置约束,以便栏始终相对于顶部布局指南定位。

因此,对于初学者来说,让我们前往您的 loadView方法:

let bar = UINavigationBar()
bar.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(bar)
self.navBar = bar
let topLayoutGuide = self.topLayoutGuide

我们现在需要确保导航栏的底部相对于布局指南定位。所以我们所做的就是说导航栏的底部 = layoutGuides 的顶部 + 44。其中 44 是导航栏的合适高度。请记住,当您打电话时布局指南可能会发生变化,因此始终使用布局指南并且永远不要对状态栏高度进行硬编码非常重要。

使用制图的方法
constrain(navBar) { bar in
bar.top == bar.superview!.top
bar.width == bar.superview!.width
bar.bottom == topLayoutGuide.top + 44
}

使用 NSLayoutConstraints 的方法
let navBarTopConstraint = NSLayoutConstraint(item: bar, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1, constant: 0)
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[bar]-0-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["bar":bar])
let navBarBottomConstraint = NSLayoutConstraint(item: bar, attribute: .Bottom, relatedBy: .Equal, toItem: topLayoutGuide, attribute: .Top, multiplier: 1, constant: 44)
self.view.addConstraints([navBarTopConstraint,navBarBottomConstraint,horizontalConstraints]))

瞧!您现在有一个响应状态栏的几行自定义导航栏

关于ios - 以编程方式添加一个与状态栏重叠的 UINavigationBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com