遇到错误时,我们在表格视图上显示一个带有标签的矩形:

ios - iOS:热点指示符抛出的 View 位置-LMLPHP

使用此代码:

    // 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 ...

它运作良好,但在某些情况下不起作用,例如启用“个人热点”时。导航栏和状态矩形之间存在间隙:

ios - iOS:热点指示符抛出的 View 位置-LMLPHP

将某物始终定位在导航栏中的正确方法是什么?

在第一种情况下,状态栏的高度为20,在第二种情况下为40。在两种情况下,导航栏和内容偏移都相同。即:
  • 案例1:偏移:-64.0,导航栏高度:44.0状态栏高度:20.0
  • 案例2:偏移:-64.0,导航栏高度:44.0状态栏高度:40.0

  • 似乎偏移量并未根据状态栏中的高度变化而增加。

    更新:请参阅(我)已接受的答案。我确定有更好的方法..如果您知道一种方法,请添加到线程中。

    最佳答案

    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/

    10-12 13:28