Putting a view behind the status bar - ios

I'm trying to create a statusBar Background. However it seem to place it wrong i've set a View in the top of the viewController and applied following contraints:
-16 trailing
-16 leading
top space 0
height 24
However this is the result
Why is there a white space at the top?

You can create the background for your status bar in the next very straightforward way :
// Set the status bar to red
var statusBarView = UIView(frame: CGRectMake(0, 0, 1024, 22))
statusBarView.backgroundColor = UIColor.redColor()
self.view.addSubview(statusBarView)
Put in the above code in your viewDidLoad() it should be work. I put the 1024 size for the width of the UIView but you can change it according your needs of the device you want.
I hope this help you.

Related

Add UIView in navigation bar

I want to create UINavigationBar with rounded corner. It will look like this
What I am thinking is I add UIView with rounded corner and insert it in navigation bar. So this is my code
let roundView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 44))
roundView.backgroundColor = UIColor.whiteBackground
roundView.roundCorners(corners: [.topLeft, .topRight], radius: 20)
navigationController?.navigationBar.insertSubview(roundView, at: 0)
setTitleTextColor(color: UIColor.black)
By the UI, this works well. But then my UIBarButtonItem is missing, it covered up by my custom view and couldn't be clicked. So my question is, how to add subview in navigation bar?
Thank you!
Just not use UINavigation bar and create all by scratch. Is the easiest way. Otherwise you can try with pattern image:
navigationController?.navigationBar.backgroundColor = UIColor(patternImage: UIImage(named: "background.png"))
From Storyboard,
You have ViewController with navigationController
Select navigationController and deselect the below selected option i.e. Show Navigation Bar visibility.
Take a UIView (purpleView) with constraints
top, leading trailing = 0 w.r.t. superview
height = 64
Take another UIView (whiteView) in purpleView with constraints
top= 20 (for status bar)
leading trailing bottom= 0 w.r.t. purpleView
Now add cancel and label to your whiteview
Now your UI Hierarchy is like below
Take outlet of whiteView and make corner radius
Thats it.
If you'r not using storyboard then you can do same with code also. In this case you have to set frame of purpleView and whiteView instead of constraints.
Hope now its clear to you.
How about to make it as a normal UIView and hide the navBar and show it in the next VC, who will know which trick you have used.
read this short article here

Swift - get size of viewController with navigation bar and tab bar

my viewController has both navigation and tab bars.
I need to figure out available space after subtracting size of navigation and tab bar.
I tried:
let height = UIScreen.main.bounds.height - self.navigationController!.navigationBar.frame.size.height - self.tabBarController!.tabBar.frame.size.height
But it is not working...
Am I doing something wrong?
EDITED:
Sorry lacked information.
I want to embed UIScroll view in between Navigation and Tab bar. The equation returned height that is bigger than available space.
titleView = UIScrollView(frame: CGRect(x: 0, y:0, width: titleWidth, height: height))
The titleView surpassed "tabbar.y"
The solution was to also subtract height of statusBar. Damn..
The easiest way to get this information is using layout guides.
let viewHeight = view.frame.height - (topLayoutGuide.length + bottomLayoutGuide.length)
However, I think you're much better off using Autolayout to manage the height of your scrollView instead of setting in directly.

Moving Tab Bar to the top of the screen swift

I want to have the Tab Bar at the top of the screen. One post suggested to do the followings (I put the following code in the viewDidLoad() of the UITabBarController) :
CODE
let tabBar = self.tabBar
// yStatusBar indicates the height of the status bar
let yStatusBar = UIApplication.sharedApplication().statusBarFrame.size.height
// Set the size and the position in the screen of the tab bar
tabBar.frame = CGRectMake(0, yStatusBar, tabBar.frame.size.width, tabBar.frame.size.height)
There are 2 problems with this solution:
The bottom of the screen is left with a black region where the tab bar was
The Tab bar covers the view at the top of the screen - the constraints of that view is relative to the device but they should be relative to the Tab bar. However when the screen is designed in the IB there is no Tab bar to relate to.
Is there a way to overcome these problems? P.S. I am new to IOS
let tabBar = self.tabBarController?.tabBar
// Set the size and the position in the screen of the tab bar
tabBar?.frame = CGRect(x: 0, y: self.view.frame.height, width: (tabBar?.frame.size.width)!, height: (tabBar?.frame.size.height)!)
Although it is against the human interface guidelines there exist a hack if you really want to.
You could create a blank UIView in your storyboard (with proper constraints set up) that would essentially be the placeholder for the tabBar when loaded.
You then set top constraints for your other views relative to this view that you have setup.
This works, but probably not best practice to do so

Avoid status bar transparency while animating

I got the viewController with 2 elements:
view with labels and buttons
tableView
I'm getting the following animation by changing view's height constraint from 170 to 0 and than animating view.layoutIfNeeded() and tableView.layoutIfNeeded().
My goal is to hide menu when content offset of the tableView reaches some value.
This works fine, except I got an overlay of status bar over the moving content from my view. Are there any options to add a sublayer to status bar not to be transparent? Or any other suggestions?
Thanks!
Create a view, put it where the status bar will be, and set its background color to which ever color you require. For example:
let statusBarView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarView.backgroundColor = UIColor.blackColor()
view.addSubview(statusBarView)
Or, set the content edge inset by (20.0, 0.0, 0.0, 0.0), which I would agree is a much more elegant solution, as suggested by #holex in the comments

How to put button on the bottom of PageViewController?

As shown on the image, I have ContentViewController, PageViewController and WelcomeController. And you can see, that I have buttons on my WelcomeController, in the bottom.
With the code: http://pastebin.com/Kf70RQWM
I put PageView with the ContentView into my WelcomeController, but it covers whole my screen. I did try using this:
self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.size.height - 50)
to have 50px space for my buttons, but in that case I get the next:
black background instead of my buttons.
Question: how can I put my buttons to those black space?
You forgot to setup autolayout. Please check the pull request here, https://github.com/orkhanalizade/messenger/pull/1.

Resources