Search code examples
swiftuinavigationbaruiactivityindicatorview

Pull to refresh indicator gets miss placed when adding imageview behind nav bar


I can't figure out why this happens, but when I add a imageview behind my tableview and navigation bar, my navigation bar acts strange:

  • The navigation bar gets stuck in a static position and dosen´t move while scrolling as it did before

  • The activity indicator from pull to refresh gets placed between the navigation bar button and the top of the tableview. Instead of staying on top of the navigation bars title as before.

Left picture is the bug without the imageview in the background.

Right picture show how it works perfectly without the imageview.

Bug from adding imageviewwithout imageview My code to get the clear navigation bar (Though I don't think this introduces any problem as it works fine when the imageview in the background isn't there):

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true  self.navigationController?.view.backgroundColor = UIColor.clear

Solution

  • Found a solution.

    Set the image as the backgroundview of the tableview and set the tableview to be fullscreen.

    let image = UIImage(named: "myphoto")
    let iv = UIImageView(image: image)
    iv.contentMode = .scaleAspectFill
    iv.layer.frame = CGRect(x: 0, y: 0, width: (self.tableView.superview?.frame.size.width)!, height: (self.tableView.superview?.frame.size.height)!)
    let tableViewBackgroundView = UIView()
    tableViewBackgroundView.addSubview(iv)
    self.tableView.backgroundView = tableViewBackgroundView