In my app I use a toolbar on the top because it lays out bar button items better for what I need, and I set the toolbars delegate to the view controller and tell it to be top attached. I also have a setting that will hide the status bar, so the issue that is happening is that when the status bar is set to hidden, and the app is closed and then re-opened, positionForBar is called but since there is no status bar, it doesn't do anything to the toolbar, so when I turn the status bar back on the app looks strange, and the toolbar is 20px down, and the status bar is showing but there is no background to the status bar, so it looks strange. positionForBar is being called still though but for some reason I need to close the app again before the toolbar will draw behind the status bar again. I have found out that if I remove the toolbar from the superview and re-add it again, it will draw behind the status bar, or i can remove positionForBar and have my own view be the background for the status bar, my old issue with this solution is that it won't be transparent (I could maybe put a 20px toolbar there though maybe?) and my problem with removing it and re-adding the view is then I will need to move a ton of my code around because remove it and re-adding it messes with constraints so I will need to fully reconstruct the entire view just for it to redraw behind the status bar. Is there a way to just refresh the view or something? I have tried setNeedsLayout and setNeedsDisplay and nothing really works for it to redraw besides removing and re-adding
Try manually setting the UIToolbar's frame:
topToolbar.frame = CGRectZero
Or updating the constraints, either will cause the UIToolbar to update its attachment.