遇到错误时,我们在表格视图上显示一个带有标签的矩形:
使用此代码:
// Fix location of message bar even as user scrolls table - per http://stackoverflow.com/q/7537858/47281
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
let newY = self.tableView.contentOffset.y + self.navigationController!.navigationBar.frame.size.height + UIApplication.shared.statusBarFrame.height
// Show rectangle using 0 and newY ...
它运作良好,但在某些情况下不起作用,例如启用“个人热点”时。导航栏和状态矩形之间存在间隙:
将某物始终定位在导航栏中的正确方法是什么?
在第一种情况下,状态栏的高度为20,在第二种情况下为40。在两种情况下,导航栏和内容偏移都相同。即:
似乎偏移量并未根据状态栏中的高度变化而增加。
更新:请参阅(我)已接受的答案。我确定有更好的方法..如果您知道一种方法,请添加到线程中。
最佳答案
property view.frame
能够捕获此类更改。因此,对任何放置位置都使用view.frame.height
可以防止重新放置。
无论是否使用热点栏,它都能找到合适的视图高度:
//with hotspot bar
print (view.frame.height) //540.0
//without hotspot bar
print (view.frame.height) //560.0
//setting a navigation bar at top using height of view frame
let navigationBar : UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width:view.frame.width, height: view.frame.height/10))
navigationBar.backgroundColor = .gray
navigationBar.setItems([UINavigationItem(title: "navigaion bar")], animated: true)
let statusbar = UITableView()
//placing the status bar below the navigation bar
statusbar.frame = CGRect(x: 0, y: navigationBar.frame.size.height, width:view.frame.width, height: view.frame.height/10) //any choice for height:
view.addSubview(statusbar)
view.addSubview(navigationBar)
关于ios - iOS:热点指示符抛出的 View 位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43461803/