How do I make a UISwitch under iOS 7 not take the background colour of the view behind it?

梦想的初衷 提交于 2019-12-03 06:51:03

问题


It looks like this whenever off:

While I'd prefer more of a grey background. Do I really have to use a UIImageView?


回答1:


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:)




回答2:


You can set the setOnTintColor property of your UISwitch to the color you desire.




回答3:


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:




回答4:


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.




回答5:


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"]];



回答6:


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];


来源:https://stackoverflow.com/questions/19187817/how-do-i-make-a-uiswitch-under-ios-7-not-take-the-background-colour-of-the-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!