I downloaded the Xcode 8 beta and was trying to play around with the iMessages app extension sdk but ran into an issue with their seemingly nonstandard nav bar height
when i transition into the app's expanded view, my image with the following frame CGRect(x: 0, y: 0, width: 100, height: 100)
ends up partially hidden behind the nav bar. i would like it to appear below the nav bar.
i tried self.navigationController?.navigationBar.isTranslucent = false
but it didn't work, which i guess makes sense since it's out of my app's scope to control.
has anyone played around with this yet? i want to avoid 2 things. simply guessing the appropriate height and moving away from a programmatic solution. thanks for the help
To answer your question: "what is the height of the extra tall navbar":
It's 86px.
UPDATE
About the Navbar hiding your UI. I did a quick demo and I had no problems.
I added a couple of labels to the top of the view (just under the status bar, at y-point value 20). Next I added 2 constraints: Leading space and Top Space for the left label and Trailing space and Top Space for the right label.
This was my result, both in compact mode and also expanded. So just make sure you put your components below y-point-value 20 and have some constraints, that way Apple will hand the view resizing for you!
It may help to have a constraint with the top layout guide like so:
This is accepted answer in Objective-C
As of now with Xcode 8.2, none of the above solution works for me. @Dilts answer will works only for
MessageViewController
, which inherits fromMSMessagesAppViewController
. But when we try to do same with our ViewController, which inherit fromUIViewController
, then this will not work.I have do this by binding Top Constraint with respect to view rather than Top Layout guide. I set top constraint to zero with respect to view and bind that constraint as topLayout.
@IBOutlet weak var topLayout: NSLayoutConstraint!
And then change value of constraint programatically on changing of presentation style.
Compact Mode
Expanded Mode
You can get the height from controller's layout guide:
The reason why @Dilts's demo works is because the labels' top are constraint to the top layout guide. If they are constraint to the superview, then it will also go behind the bar.