将子视图添加到 UINavigationBar 时向下推 UITableView

Posted

技术标签:

【中文标题】将子视图添加到 UINavigationBar 时向下推 UITableView【英文标题】:Push UITableView down when adding subview to UINavigationBar 【发布时间】:2016-10-17 09:35:00 【问题描述】:

我正在尝试实现一个应该出现在UINavigationBar 下方的通知栏。问题是当通知出现时,UITableView 中的单元格没有被下推,因此隐藏在通知后面,如下所示:

我的代码如下:

@IBOutlet var notificationView: UIView!

let navBar = self.navigationController?.navigationBar
let navBarHeight = navBar?.frame.height
let notificationFrame = notificationView.frame
let nSetX = notificationFrame.origin.x
let nSetY = CGFloat(navBarHeight!)
let nSetWidth = self.view.frame.width
let nSetHight = notificationFrame.height

notificationView.frame = CGRect(x: nSetX, y: nSetY, width: nSetWidth, height: nSetHight)
self.navigationController?.navigationBar.addSubview(notificationView)

【问题讨论】:

只需更新toptableView.frame.origin.y 的tableview 约束 @h44f33z 你会怎么做? self.tableView.frame.origin.y = self.tableView.frame.origin.y + nSetHight 根本不动。据我所知,您不能为 tableview 设置顶部约束。 【参考方案1】:

有一些解决方案可以解决您的问题,但对您来说最简单的解决方案可能是在顶部添加内容偏移量,如下所示:

self.tableView.contentInset = UIEdgeInsetsMake(newBar.height, 0, 0, 0)

@h44f33z 建议的另一个解决方案是在新栏和 tableView 之间添加一个约束,因此它类似于此(以视觉格式):

"V:|-0-[newBar(\(newBar.height))]-0-[tableView]-0-|"

【讨论】:

以上是关于将子视图添加到 UINavigationBar 时向下推 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

如何将子视图添加到 UIViewController 将 UINavigationBar 推到后面

将子 UIView 锁定到 topLayoutGuide

将子视图添加到视图控制器时,ScrollView 不滚动

选择时将子视图添加到 UITableViewCell

在 IOS 4.x 或更低版本中,将子视图添加到视图时不会调用 viewDidAppear 方法,为啥?

将子视图添加到启动画面