将UILabel位置修复在UITableViewController的UINavigationBar

时间:2017-03-31 01:38:17

标签: swift uitableview uilabel

当我们需要显示状态消息时,我们在UITableViewController view上放置一个临时标签。视图直接位于UINavigationBar下方。这种方法效果很好,但statusView会随表格滚动,并会随着表格向上滚动而消失。即使表格滚动,如何修复statusView的位置?

更新

another question启发的几乎可以使用TableViewDelegate方法来修复statusView位置:

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    var newFrame = statusView.frame
    newFrame.origin.x = 0
    newFrame.origin.y = self.tableView.contentOffset.y + self.navigationController!.navigationBar.bounds.height 
    statusView.frame = newFrame
}

它将statusView栏放在固定位置,但它部分位于导航栏下方。好像我们只需要调整newFrame.origin.y逻辑....

更新2

https://stackoverflow.com/a/40202931/47281只需要包含状态栏:

    newFrame.origin.y = self.tableView.contentOffset.y + self.navigationController!.navigationBar.frame.size.height + UIApplication.shared.statusBarFrame.height 

2 个答案:

答案 0 :(得分:0)

您可以尝试使用ViewController子类并向其添加UITableView,而不是继承UITableViewController。

答案 1 :(得分:0)

上述解决方案的每个更新都受到another question的启发 - 我们使用TableViewDelegate scrollViewDidScroll来修复位置:

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    var newFrame = statusView.frame
    newFrame.origin.x = 0
    newFrame.origin.y = self.tableView.contentOffset.y + self.navigationController!.navigationBar.bounds.height 
    statusView.frame = newFrame
}