Fully customising a UINavigationBar for iOS 11 - ios

I'm working on a project where the designer came up with the following great idea:
A navigation bar with a height of 175 and a slanted edge. Now I didn't think this would be a problem, but it doesn't seem like I can actually edit the frame and/or mask of a UINavigationBar anymore... Normal stuff like editing the frame, or the bounds doesn't seem to work.
Does anyone have any experience with this? I believe it's an iOS 11/Xcode 9 specific problem.
Thanks.

I am afraid that you couldn't implement the design with the UINavigationBar. You may have to hide the system navigation bar and add a custom view on the top of view controller.
BTW, this design is quite Android-style...

You can't customize native navigationbar like this!.
So, you have to do it with custom view.
If you want this kind of navigationbar in every viewcontroller then,
subclass UIView and set it's all the properties and frame in that class.
Then in your viewcontroller just instantiate that class and add that view(instance) in your main view at top!

Related

StatusBar tint and hidebaronswipe

I just want to change the color of my statusBar to follow the color of my navigationController.
I've read some posts, and now I'm understand that I'm not able to change the statusBar color, basically, I need have a view behind and change the color of that view. Ok.
So my problem is:
I have a UITableView inside a ViewController and this ViewController is embed in a NavigationController.
In the NavigationController I set the flag Hide Bars:On Swipe
When I swipe the TableView my navigationBar disappear, but it also override my view that I set to a height of 20 to simulate the StatusBar.
I found this Post, and it is the exactly my problem, I've read on this post a logical solution, but OP don't answered if it worked or not, anyway, I think that I need to work correctly with the constraints, but this solution doesnt work for me on xcode7 swift 2.0.
Any ideas?
I fount the perfectly solution on this post:
The solution marked as accepted is outdated.
Autolayout: Add constraint to superview and not Top Layout Guide?

Creating custom implementation of navigation bar

I wish to create a view similar in behavior to the UINavigationBar.
I cannot simply customize the bar as I want the space to be taller and I want to have several other subviews on it other than just UIBarButtonItems. So, I want to be able to create a similar implementation including the floating/translucency effect.
I good example of this is the address bar in Safari in iOS 7. The UITextField on the bar is something that cannot be added on the default UINavigationBar. Nevertheless, the Safari bar still has the transparency.
I do not want it to shrink like it does in Safari when scrolling down, I simply want it to remain just like a UINavigationBar would. I was thinking about adding a subview to the root UIScrollView, but this would scroll along with everything. I want this to remain at the top, but I want other elements to be able to scroll.
How would I go about implementing this?
If you are confident that you can't to this with the default UINavigationBar, you could shrink (from the top) the UIScrollView with whatever the size the custom UINavigationBar is and then add the navbar as a subview to the root view at (0,0) coordinates. It will be independent from the scroll view.
On the other hand, if you need this to be persistent through the application and use it in all of the screens, it will be wise to make some changes starting for the AppDelegate, but that's for another question.
For the iOS 7 transparent-style part, look here: FXBlurView. Best of luck!

UISplitView with UITabbar

I have a strange one that I can not seem to fix. I am currently working on updating my app to iOS7. This all worked in iOS6. It is an universal app and thus uses same xib files. However the iPad uses UISplitViews on some. Like I said, this all worked in iOS6 oh this all works on the iPhone too.
The problem is a grey bar at the bottom. I changed the tab bar to be opaque to move views up properly as i had some UI clipped to bottom of views and that went underneath the tab bar, sidetracked there. But if i set it back to translucent bar, it goes underneath but stretched properly. if i dont, it adds a bar. Other tabs work fine when NOT using splitview.
The UISplitviewController is added programmatically.
See attached image for better description.
This I have tried:
Added autoresize on splitview
Checked xib for subviews in the splitviews to have auto resize
Tried to force splitview to be screen bounds
Removed clips to bounds on all views
Removed autoresize subviews
Any ideas would be welcomed.
Thank you all.
UPDATE:
setting the background colour the uisplitview, it does colour the bar black. So the uisplitview is definitely stretching to it.
I subclassed UISplitViewController and added the line below to viewDidLoad and that fixed the grey line.
self.extendedLayoutIncludesOpaqueBars = YES;
I believe I have found an alternative solution for you. I have had the exact same problem, mostly because we are both doing something against Apple's Guidelines which is having a SplitViewController nested within a Tabbar controller (SplitView should be the root view). This was okay in iOS 5/6, but now in iOS 7 there are far too many side effects to achieve this.
The reason you see your view stretch completely when you set the bar to be translucent is because the bar is NOT taken into account when drawing the view. When you set translucent to false, it is then taken into account of the view and you will see that grey bar there because that's your view pretending there's a tabbar at the bottom of the screen.
And as always, a SplitViewcontroller's height cannot be changed, as it is determined by the visible window height.
I tried everything you did and then some. The real solution came from using a third-party Split View Controller.
I recommend switching over to https://github.com/mattgemmell/MGSplitViewController . This split view controller is actually one large View with container views living inside of it. Because of this, you avoid all the side effects of putting an actual split view controller within a tab bar.
If that doesn't float your boat, you could create your own solution which follows the same idea of having one UIViewController with two container views contained in it, though the people behind MGSplitViewController did a good job of that already.
This was the only way I was able to solve this issue, let me know if you find an alternative.
Instead of creating a subclass for UISplitViewController, I just added this code on my master's viewDidLoad:
self.splitViewController?.extendedLayoutIncludesOpaqueBars = true
For the controller that is the detail view of UISplitViewController you just do this:
-(UITabBarController*)tabBarController{
return nil;
}

iPhone: hiding a custom view under the navigation bar

For the app I working on, I am implementing a control that is similar to the notification view on iOS. So, I am working on dragging a view down from under the navigation bar of the UIViewController.
My question is whether there's a way to position a view that is MOSTLY hidden under the navigation bar?? The goal is to have just a few pixels visible, so that there's a way to grab it and drag down.
Thanks!!
Alright, resolved this issue myself. Turns out what works for me is having a custom view and then adding that view in IB in the order where nav bar comes after that custom view.
Another trick was to figure out how to initialize/embed that custom view and for that I found help here: UIView subclass with its own XIB

Disable the shadow on UIPopoverViewController's content view

I'm creating a custom popover for a UIPopoverController by subclassing UIViewController to manage the content view and UIPopoverBackgroundView for a custom background. Everything works great, except the UIPopoverController is applying a shadow to the content view, making the content appear bordered with shadow. I can't seem to find which view's layer is shadowed. How can I disable this shadow? Has anyone else ran into this problem?
As this is still standing months later, I'll close this by saying I implemented my own popup controller. It's a shame, though, one would think there would be a better way...

Resources