【问题标题】:NavigationBar weird extra white spaceNavigationBar 奇怪的额外空白
【发布时间】:2019-04-10 10:35:15
【问题描述】:

我正在使用带有 UITableView 的普通视图控制器,它嵌入到导航控制器中,导航控制器嵌入到标签栏控制器中:

  • 标签栏控制器
  • 导航控制器
  • 带有 TableView 的 UIViewController

我正在使用带有大标题的 NavBar。当我以通常的方式向上滚动时,带有大标题的导航栏具有正常高度。但是当我触摸状态栏并且 tableView 滚动到顶部时,导航栏会在状态栏和它的标题之间获得额外的空白:

用手指滚动时的正常空间:https://ibb.co/0BWgB0T

触摸状态栏时的额外空间:https://ibb.co/LxFwDKx

唯一有助于避免多余空间的方法如下:

edgesForExtendedLayout = UIRectEdge(rawValue: 0)

但它使 tabBar 变成灰色,而不是应有的白色,而且无论如何似乎是一个非常不正确的解决方案。

有人遇到过同样的问题吗?

【问题讨论】:

  • 这是您处理UITableView 时的预期行为。默认情况下,当您在 iOS 中点击状态栏时,表格视图会滚动到顶部。在您设备的设置应用中尝试,您会发现类似的行为。
  • @nayem,是的,我知道 :) 我描述的问题是使用 tableView 的 scrollsToTop(触摸状态栏)会增加导航栏的高度。无论如何我已经找到了解决方案并写在下面
  • 这不是问题。相反,您使用的是大型标题导航栏,它占据了增加的高度。当表格视图滚动到顶部时,它会强制导航栏重置为其默认初始状态,这就是您获得增加导航栏高度的原因。正如我在上一条评论中提到的,尝试检查 Settings 应用中的行为,你就会明白我的意思。

标签: swift scroll tableview uinavigationbar


【解决方案1】:

好的,突然间我找到了解决方案。是的,它包括这行代码:

edgesForExtendedLayout = UIRectEdge(rawValue: 0)

但我还必须将 tabBar 颜色设置为更可取,并在 Interface Builder 中禁用其“半透明”属性。

希望它会帮助某人。

【讨论】: