It looks like this whenever off:
While I\'d prefer more of a grey backgrou
You can also use an image as background, using the [UIColor colorWithPatternImage];
mySwitch.onTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"toggle-bg-on"]];
mySwitch.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"toggle-bg-off"]];
There's no API support for changing the off fill color of a UISwitch
.
Adjusting the tintColor
will only affect the outline, and adjusting the backgroundColor
will affect the whole frame, including the parts outside the rounded bounds.
You either have to place a properly shaped opaque UIView
behind it or - easier - use a custom open source implementation, such as MBSwitch, which allows you to set the off fill color.
You can also set this for the switch in Interface Builder. Just set the background colour of the UISwitch
to whatever colour you want (white, in the example below), then set a User Defined Runtime Attribute of layer.cornerRadius = 16
:
Here is how I changed the fill color of my iOS7 UISwitch.
First you need to import QuartzCore.
#import <QuartzCore/QuartzCore.h>
Then set the background color and round the UISwitch's corners.
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0.0, 0.0, 51.0, 31.0)];
mySwitch.backgroundColor = [UIColor redColor];
mySwitch.layer.cornerRadius = 16.0; // you must import QuartzCore to do this.
[self addSubview:mySwitch];
This will give you a UISwitch with a custom off (background) color.
Hope this helps someone:)
You can set the setOnTintColor
property of your UISwitch
to the color you desire.
Adding to Barry Wyckoff solution : set tint color also
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0.0, 0.0, 51.0, 31.0)];
mySwitch.backgroundColor = [UIColor redColor];
mySwitch.layer.cornerRadius = 16.0; // you must import QuartzCore to do this.
mySwitch.tintColor = [UIColor redColor];
[self addSubview:mySwitch];