IOS 8.3 Any UISegmentedControl in UIPopoverController tint is white and unadjustable - ios

In 8.3 Simulator I have UIViewController which contains a UISegmentedControl. The segmented control's appearance is managed by an appearance proxy. If I display this custom controller in a UIPopoverController, the segmented control's tint is ALWAYS white. Cant change it via proxy or directly. If I place the view controller in a regular modal, the segmented control's tint behaves how it should. All other segmented controls in the app obey the appearance proxy. It displays perfectly fine in iOS 8.2 Simulator. WTF?
Language = swift
Xcode 6.3
targeting >= 8.1

Tint adjustment mode is by default UIViewTintAdjustmentModeAutomatic, if you want to set specific tint colour, please make sure you have changed the tint adjustment mode to normal.
[[UISegmentedControl appearance] setTintAdjustmentMode:UIViewTintAdjustmentModeNormal];

I'm pretty sure this is an 8.3 bug since it doesn't exist in 8.2. My solution is to change the application window's tintcolor before popping up the popover. For whatever reason, the segmented control doesn't inherit the correct tint, and cant be changed inside a popover

Related

Change UIWebView Done button color

I am using a UIWebView to display content in an app and would like to change the color of the Done button that is displayed whenever a select control is used.
It is currently displaying as white on gray which is hard to see.
The "Done" button is white because you are probably setting the tintColor to white for all UIBarButtonItems using UIAppearance. That affects the "Done" Button in the picker view which also happens to be a UIBarButtonItem.
So you have to exclude the "Done" button in the picker view from the global white tintColor. I don't know if you only need the white UIBarButtonItems in your navigation bar, but if you do you could do this to only set the tintColor for the bar button items in your navigation bar and leave all other UIBarButtonItems untouched:
UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UINavigationBar.self]).tintColor = UIColor.whiteColor()
However this is only available in iOS9 and the old appearanceWhenContainedIn method that works for older iOS versions is not available in Swift.
So, if you are working with Swift and you have to target earlier iOS versions than iOS9 this is probably not working for you. In that case you have to remove the UIAppearance setting for the white tintColor and set the tintColor for the UIBarButtonItems in your navigation bar "manually" without using UIAppearance.
Another possible solution is to just do
UIPickerView.appearance().tintColor = UIColor.blueColor()
put this in your AppDelegate and you are ready to go!

Blurred translucent navigation bar in iOS

I'm trying to get this blur-translucent navigation bar effect (The first navigation bar in the image) in my Swift iOS application:
But I can't get this done. I've tried several methods, some of them are below:
setBackgroundImage, shadowImage and translucent attrs in AppDelegate (Getting the NavController from the RootViewController attr)
Those lines in AppDelegate main method:
UINavigationBar.appearance().translucent = true;
UINavigationBar.appearance().barTintColor = UIColor(white: 1, alpha: 0.4)
Changing attributes from UIBuilder
Setting self.automaticallyAdjustsScrollViewInsets = true and self.edgesForExtendedLayout = UIRectEdge.None in viewControllers
But still can't get this to work. I'm running the app on XCode simulators, using iOS 8.1 and 9.0
What I am doing wrong?
The second navigation bar is already translucent and blurred—it just isn't quite as translucent as the first navigation bar. If you open Digital Color Meter and mouse over your screenshot, you can see that the background of the second navigation bar is darker in the area covering the image.
The reason why the first navigation bar is more translucent than the second navigation bar was explained in this question: the screenshot of the first bar was taken from a device running iOS 7.0.2, whereas the screenshot of the second bar was taken from a device running iOS 7.0.4. Apple changed the behaviour of UINavigationBar between those versions of iOS, and again with iOS 7.1.
Apple explains the current translucency mechanism as follows:
A translucent bar mixes its barTintColor with gray before combining it with a system-defined alpha value to produce the final background color that is used to composite the bar with the content it overlies.
The only description of the blur effect appears to be the following:
Navigation bars are translucent by default in iOS 7. Additionally, there is a system blur applied to all navigation bars.
You can change the transparency of the bar by using UIImage.imageWithColor: to make a background image for the bar from a UIColor with an appropriate alpha value, but doing so will remove the blur effect. There is no documented way to alter the "system-defined alpha value" to increase the translucency of the bar without removing the "system blur".
If you want to imitate the old translucency and blurring effects on iOS 8.1 and 9.0, you'll need to make your own subclass of UINavigationBar and insert one or more subviews such as a UIView with a background color that uses an appropriate alpha value (for transparency) and/or a UIVisualEffectView (for the blur effect).
You might be able to find a combined view in one of the answers to this question.
Related: Blurring effect disappeared on iOS 7.1
Add bellow code in didFinishLaunchingWithOptions:
For Objective C
[[UINavigationBar appearance] setTranslucent:NO];
For Swift 3+/iOS 10+
UINavigationBar.appearance().isTranslucent = false
Maybe plist changes can fix your problem.

UIPopoverController iOS 8.3 - UIBarButtons and UISegmentedControl not shown after dismiss

In our app when we present a UIPopoverController, after we dismiss it, if we navigate to any other screens that have barButtonItems or segmentedControls, these are not showing but they are intercepting the touch, so tapping on them works.
Even when we navigate to a new UINavigationController, it still doesn't work.
The navigationBar is visible, but the buttons or the segmentedControls on the view controller's view are not.
The weird thing is that if I enable Color Blended Layers I can see the buttons / segmentedControl.
It happens on multiple screen in our app where we have bar buttons or segmentedControls.
It happens only on iOS 8.3 (we build the app with iOS 8.3 SDK). We tried both presenting the pop over programatically and using the Present as Popover Segue.
The same code works on iOS < 8.3.
Has anyone encountered this issue?
I have attached some screenshots.
I found the issue.
It seems that the tint color of the UIWindow(blue) was overriding the tint color of the UINavigationBar (white) so the UIBarButtonItems were actually blue.
I was setting them both in AppDelegate using UIAppeareance.
The solution was to avoid setting the tint color to the UIWindow and set it directly to the UIView subclasses that I was interested in (UITableView and UIButton)
I have no idea why this happened only after I dismissed the popover and only in iOS 8.3

UIStepper tintColor not functioning?

I recently updated my project to iOS 7.1. During the switch, nothing changed except for one thing. In iOS 7, within my app delegate, I set my window tint color to blue. On a view controller, I have a UIStepper that I set the tint color as white in both Interface Builder and programmatically. Prior to updating, the stepper was tinted white while everything else was blue as it should have been. After being updated, however, the stepper remains the tint color of my app. Does anybody know why this happens, or how to fix it? Any insight is appreciated. Thank you.
I solved the problem by clicking on my UIStepper in Interface Builder, clicking on the first pane of the item inspector, and changing global tint to white.

UIToolbar incorrect colour in iOS7

When I set the bottom UIToolbar to black on the view controller, it appears as a more greyish colour (the same thing happens with other colours--it sort of fades them out). What I assume is happening is that in iOS7 the toolbar seems to adapt the colour of what is beneath it (currently white) which makes for the duller colour.
I've updated the view controller so that the "extended edges" options are turned off but still get this effect. Has anyone else had this issue yet?
UPDATE:
I resolved the issue by setting the background colour of the UIToolbar to black (something I haven't had to do in previous versions of iOS). If anyone can think of a better solution, let me know.
All tool- and navigation bars in iOS 7 have a translucent property.
This causes the effect, where the background shines through in blurred form (just like the control center).
Just set YourToolbar.translucent = NO;.
SET the t*ranslucent property to NO*:-
IN iOS 7 you need to set the barTintColor Property-
UIToolbar *doneToolbar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 584, 320, 44)];
doneToolbar.translucent=NO;
doneToolbar.barTintColor=[UIColor blackColor];
[self.view addSubview:doneToolbar];
I have used it its working fine...
setting the background color instead of the bar tint worked for me
I set the bar tint to default, the translucent property to NO and the background to the color i wanted and it worked for me.

Resources