ios - 增加 NavigationBar 高度

标签 ios swift uinavigationbar uibarbuttonitem

我有以下代码:

func navbarbutton() {
    UIView.animateWithDuration(0.2, animations: { () -> Void in
        let current = self.navigationController?.navigationBar.frame
        self.navigationController?.navigationBar.frame = CGRectMake(self.frame!.origin.x, self.frame!.origin.y, self.frame!.size.width, current!.size.height + 50)
        self.navigationController?.navigationBar.layoutIfNeeded()
    })
}

我能够将导航栏的高度增加 50 dp。那不是我的问题。我遇到的问题是 UIBarButtonItems 都与底部对齐。我怎样才能让它们与顶部对齐,以便我可以自己在底部添加更多内容?我得到了图片中的东西:

enter image description here

是否可以让它与顶部对齐?

最佳答案

很遗憾,您不能这样做。

UINavigationBar 中的 View 层次结构是私有(private)的,因此您无法在不遍历 subview 并对其进行所有操作的情况下操作它。这可能不是一个好主意。

出于好奇,我使用 View 调试器查看了 iOS 10 中的消息应用程序,因为它们显然是这样做的。他们实际上是通过添加自己的 UIButton 来替换 back 和 rightBarButtonItem 来实现布局的。这是您可以做的事情,但是他们还将内部(和私有(private))内容 View 之一的 alpha 设置为零,以便原始内容不再可见。
不幸的是,这是您无法轻易做到的事情。您可以尝试破解直到它起作用,但请记住,您还需要处理推送/弹出、调用状态栏、交互式转换和旋转事件。

如果您不喜欢 iMessage 风格,只是想在导航栏下方添加一些内容,为什么不考虑将 UIVisualEffectView 固定到 topLayoutGuide在你的 UIViewController 中?您可以很容易地获得相当漂亮的外观,并且可以节省很多黑客攻击。这是一个例子:

Example

关于ios - 增加 NavigationBar 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40316352/

相关文章:

objective-c - 为什么@autoreleasepool?

ios - 在没有播放按钮覆盖的情况下在 ios 中显示 html5 视频

ios - 如何在 React Native 中更改 window.rootViewController?

swift - 如何在 Swift 中初始化和使用函数指针

iphone - 导航栏后退按钮,文本未居中对齐

ios - NSStrikethroughStyleAttributeName , 如何在 iOS 10.3 中删除字符串?

swift - 我可以使用自定义 View 作为 NSSplitView 的分隔线吗?

嵌套结构类型的 Swift 数组 (count, repeatedValue)

ios - UINavigationController interactivePopGestureRecognizer 在 iOS7 中工作异常

ios - 试图构建一个顶部带有导航栏的表格 View