The iOS navigation Bar seems not suitable as I set - ios

This is a custom Navigation bar,the height I set for it is 64,but it is more than 64 as you can see.I don't how it is happened.
Here is my code:
navigationView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, screenWidth, 64)];
navigationView.userInteractionEnabled=YES;
navigationView.backgroundColor=[UIColor whiteColor];
navigationView.alpha=0.85;
[self.view insertSubview:navigationView atIndex:9999];
what confused me most is that it's shown OK on my iPhone5(ios8) but shown wrong on my iPhone 6(ios9)

I had solved this problem by myself.The solution is:New a launch screen of the project.That's the way.Then the status bar would recover to it's correct face.

Related

UIToolBar lose translucent when clipsToBounds in iOS7.x

Usually i use UIToolBar to fake the live blur effect, it has been working great for me. But there is a place I need to have a rounded corner toolbar, however, whenever I set the cornerRadius and clipsToBounds, the translucent (blur) effect is gone, my tool bar becomes transparent.
here is my code:
UIToolbar *blurView = [[UIToolbar alloc] initWithFrame:self.bounds];
blurView.barStyle = UIBarStyleBlack;
blurView.layer.cornerRadius = self.height / 2;
blurView.clipsToBounds = YES;
[self insertSubview:blurView atIndex:0];
here is a screen shot when clipsToBounds = YES, the corner is rounded, but the blur is gone.
But if i comment clipsToBounds out, the blur effect is back, but the corner is not rounded anymore.
The even stranger part is this issue only happens in iOS7.x, everything works perfectly in iOS8.x with the exactly same codes.
just in case if you wondering, here is how it looks on iOS8.x and how it should look on iOS7.x
I have been searching around on Stackoverflow and Google, can't find any clue. Please Help!
Try blurView.layer.cornerRadius = self.height / 2 - 0.5;

iphone 6 banner messing up after adding iphone 6 launch screen

So in my app i have my launch screen/splash screen set for the 4, 4s, 5, and 6+....basically all the splash screens except for the one for the 6.
Everything looks great. background images for the toolbar are properly scaled and everything. however on the iphone 6 its status bar is black even though its set in the plist to white and i believe it has to do with the missing iphone splash screen.
So I add in the launch screen for the 6 to correct this right? Awesome it works! but now my background image for the 6 doesnt get scaled properly and its left at the iphone 5 #2x size with a repeated edge.
How do i correct this?
Heres the code im using to implement the background image:
-(void)viewWillAppear:(BOOL)animated{
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 64);
[toolbar setBackgroundImage:[UIImage imageNamed:#"Missions.png"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[self.view addSubview:toolbar];
}
and here are my image names:
missions.png (320x64)
missions#2x.png (640x128)
missions#3x.png (1242x195)
Notice i dont really have an image for the iphone 6 (750xwhatever). thats because i dont see how i could fit it in the naming convention with how the code runs it. wish it were as easy as missions#2.5x.png.....
why don't you just paste this into your UIViewController subclass
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
and go into your info.plist and add the key UIViewControllerBasedStatusBarAppearance and set it to YES.

Custom navbar sizing from iphone 5 to iphone 6

I have a custom tab bar that was optimized for the iphone 5.
UINavigationBar *myBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
[self.view addSubview:myBar];
When it on the iphone 6, part of it is cut off of course because it only goes to 320 pixels.
How do i fix this? Is there a way to check which iphone its being ran on, and then run the pixel specified code? I plan on putting a background image on this navbar later so it must be centered.
In general it is a bad idea to hard code dimensions like this. This will break if you rotate, or if viewed on a screen with a different size than the original iPhone screen.
Many of these controls have a default size that you can use to your advantage. Instead of handing it a frame, consider just modifying the frame it gives you:
UINavigationBar *myBar = [[UINavigationBar alloc] init];
CGRect navBarFrame = myBar.frame;
navBarFrame.size.height // returns the right size for the current OS
navBarFrame.size.width = self.view.frame.size.width;
myBar.frame = navBarFrame;
This type of defensive coding is helpful in keeping your app laid out properly under many conditions, including when you embed this control into a parent view controller, or viewed on tomorrows larger-screened iOS devices.
All this said, are you sure you don't want a UIToolbar? Typically you don't ever create your own UINavigationBar, as that class is just used in UINavigationController for you.
UINavigationBar *myBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 50)];
[self.view addSubview:myBar];
may be this help you.

ios 6 and ios 7 incosistance in view

as we know in iOS 7 the status bar overlaps with a view but not in iOS 6 .
I developed whole application for iOS7 and now I being asked to make iOS6 support for it
but it is just a mess.
as we see in this Overlaps the status bar on view iOS7 question there is solution for iOS 7 to be like iOS6
but can I make it opposite way ? and somehow make iOS 6 behave like iOS7 with status bars ?
You can't make iOS 6 status bar act like iOS 7 status bar they are completely different designs. iOS 7 uses a flat UI whilst iOS 6 doesn't. Have a read through the iOS 7 transition guide for a better understanding and how to handle the differences.
To be specific towards the Status bar here is the section of that document that tells you how to handle it.
Short Answer: No you can't.
iOS 6 SDK does not let you to control the status bar like iOS 7 does.
What you can do is adapt the size so it does not lose any structure in your actual layout
First you can define a constant to know when it is iOS 7 or not:
#define kIS_IOS_7 (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
then in your AppDelegate you can change the navigation bar appearence like this:
UIView *background = [[UIView alloc] init];
if (kIS_IOS_7) {
background.frame = CGRectMake(0, 0, 360, 64);
} else {
background.frame = CGRectMake(0, 0, 360, 44);
}
background.backgroundColor = [UIColor blackColor]; // choose your color or image
UIGraphicsBeginImageContext(background.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[background.layer renderInContext:context];
UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[[UINavigationBar appearance] setBackgroundImage:backgroundImage
forBarMetrics:UIBarMetricsDefault];

Bar translucency gone in iOS 7.0.3

Compare the two screenshots:
Done on iOS 7.0 simulator
And the one done on iOS 7.0.3 iPhone 4S:
Same code here and there and same stuff! Any idea why the translucency is gone on the real device?
I have this code to simulate it (I know it's probably awkward and not right but that's how it is):
topMenuView = [[UIView alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, 0, self.view.frame.size.width, TOP_BAR_ORIG_HEIGHT)];
topMenuView.clipsToBounds = YES;
UIToolbar *topMenuViewBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, -4, self.view.frame.size.width, TOP_BAR_ORIG_HEIGHT + 4)];
topMenuViewBar.barStyle = UIBarStyleDefault;
topMenuViewBar.barTintColor = [BSFunctions getColorFromHex:#"1ea6ff"];
const CGFloat statusBarHeight = 20;
UIView *underlayView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, topMenuViewBar.frame.size.width, topMenuViewBar.frame.size.height + statusBarHeight)];
[underlayView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[underlayView setBackgroundColor:[BSFunctions getColorFromHex:#"1ea6ff"]];
[underlayView setAlpha:0.36f];
[topMenuViewBar insertSubview:underlayView atIndex:1];
UIView *underlayView2 = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, topMenuViewBar.frame.size.width, topMenuViewBar.frame.size.height + statusBarHeight)];
[underlayView2 setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[underlayView2 setBackgroundColor:[BSFunctions getColorFromHex:#"0291ff"]];
[underlayView2 setAlpha:0.36f];
[topMenuViewBar insertSubview:underlayView2 atIndex:2];
[topMenuView addSubview:topMenuViewBar];
[self.view addSubview:topMenuView];
The main point is it used to work before on the device! But after iOS 7.0.3 came out it changed. I'm noticing the same behavior in Facebook and Fitocracy iOS apps.
UPDATE
On Xcode 5.0.1 with iOS 7.0.3 simulator we have this (which is different from the first image on iOS 7.0 simulator as you can see):
OK, so after having played around with the colours a bit more, I managed to get a similar sort of appearance with the blur!
Previously, I was setting a barTintColor on the navigation bar appearance which had the following values:
R:17
G:63
B:95
A:1
This was fine in iOS < 7.0.3, and the output color in the nav bar (with the blur effect) was actually:
R:62
G:89
B:109
Since iOS 7.0.3, the barTintColor seems to take into account the alpha value of the color we set. This meant that the nav bar was actually outputting a solid color 17,63,95, and there was no blur effect.
The key to getting the blur effect back is setting an alpha < 1 in the barTintColor.
After lots of guess work and trying different RGB values, I managed to get the exact same RGB output from the nav (and tab) bar, using the following RGBA:
R:4.5
G:61.6
B:98
A:0.65
It does not look like there's a magic ratio to apply to the previous color to obtain the new one.
Anyway I've actually rejected the binary that got approved this afternoon, and have re-submitted with these new values so that user's don't get an ugly app :)
Hope this helps.

Resources