twotoasters / TWTSideMenuViewController

Side Menus for iOS 7
MIT License
847 stars 148 forks source link

UINavigationController in menuViewController overlaps status bar #22

Open duncsand opened 10 years ago

duncsand commented 10 years ago

I'm using a UINavigationContoller in the menuViewController. This works great, but the navigation controller overlaps the phone's status bar - it needs to be nudged down by 20 pixels.

auto234875 commented 10 years ago

I'm having the opposite problem. Using the navigation controller in the mainViewController.

Occasionally, when I dismiss modal from my menuVC and close the side menu, the status bar will overlap the navigationbar. Seems like the navigationbar frame y coordinate starts at 0 instead of 20.

The only way to fix this is to fire off another modalVC and dismiss it. I can't seem to get this to happen consistently.

Edit: Here's what I've noticed also. Since the modalVC that fires off from my menuVC is a login screen, somehow when I cancel the modal, it never gives this problem.

However, when I log in successfully and dismiss my modal, occasionally it happens.

It's also not like the y coordinate of the navigationbar is wrong. The navigationbar y coordinate is always 0, but what's causing the problem is the height of the navigationbar has changed from 64 to 44.

jnjosh commented 10 years ago

@duncsand Putting a navigation controller in the menu side I can see why this would need to be nudged. The controller makes no assumptions about the contents of the view controller you put in there. I suppose we could add some insets that can be applied to the content areas of either side.

@auto234875 I think I've fixed this in a branch working on rotation fixes. I'll be working on getting this merged so maybe that helps your problem. I'll check back in when it is merged.

auto234875 commented 10 years ago

@jnjosh I'll definitely look at it. Right now, I'm limiting my mainVC to portrait because of the previous issue I reported. This is causing I lot of problem because some of my other VC on the stack has to be in landscape and I can't figure out how to force auto-rotation when they pop back to the rootVC (mainVC).

jnjosh commented 10 years ago

@auto234875 You can check out the menu_display_issue branch. It is a work in progress but it involved a lot of updates for rotation and landscape.

auto234875 commented 10 years ago

@jnjosh Thanks, I will look into it.

http://imgur.com/vVaGXQs Link is a picture of the issue. I can't figure out why it only happens when login is success. In either case, I always use [self dismissViewControllerAnimated:YES completion:nil];

I'm finding out that this issue arises whenever modal is getting dismissed from my menuVC.

For example, my settingVC which is modal, if I dismiss it without making any change. Everything goes well.

But if I make a change, like disable pocket (read it later feature) and reenable it, which takes me outside the app to login, now if I dismiss the modalVC, I'll get the problem with the navigation bar. And this happens consistently.

At this point, if I exit the app with the home button and go into it again, I can actually see the 20px change appearing and my navigationbar grows to the proper height.

auto234875 commented 10 years ago

Well guys, I hacked around my problem. But it's not the preferred solution.

What I did was close the sideMenuVC and fire off the modal segue from my mainVC instead of from the menuVC. The status bar issue is taken care of, after doing this, I can't get replicate it anymore.

duncsand commented 10 years ago

@jnjosh I got the NavController working by nudging the menuController down 20pts and adding a 20pt filler view above in the updateMenuViewWithTransform method.

It seems a bit of a hack though - the content doesn't scroll under the status bar, as the menuController is now 20pts lower. In iOS7 normally the system detects the presence of a UINavigationController and does all this automatically, making sure the content scrolls under the status bar. I'm not sure why this isn't happening here - presumably something to do with the view hierarchy that's confusing things.

KeepWalkingBR commented 10 years ago

I have the same problem. It happens with me specifically after this sequence of events: 1) menu is open 2) you present a modal vc on top of it 3) app becomes inactive 4) app becomes active again 5) Dismiss modal 6) Close menu

Then the navigation bar starts overlapping with the status bar. A typical cenario is Facebook login. I worked around this, but it's a little ugly and I'm not proud. Basically I removed the modal view after going to background and then put it back before going foreground. So in AppDelegate:

olala7846 commented 9 years ago

@KeepWalkingBR thanks for your solution!