我做了custom UISwitch (from this post)。但问题是,我的自定义文本有点长。有没有办法调整交换机的大小? [我试过setBounds
,没有用]
修改
以下是我使用的代码:
@interface CustomUISwitch : UISwitch
- (void) setLeftLabelText: (NSString *) labelText;
- (void) setRightLabelText: (NSString *) labelText;
@end
@implementation CustomUISwitch
- (UIView *) slider
{
return [[self subviews] lastObject];
}
- (UIView *) textHolder
{
return [[[self slider] subviews] objectAtIndex:2];
}
- (UILabel *) leftLabel
{
return [[[self textHolder] subviews] objectAtIndex:0];
}
- (UILabel *) rightLabel
{
return [[[self textHolder] subviews] objectAtIndex:1];
}
- (void) setLeftLabelText: (NSString *) labelText
{
[[self leftLabel] setText:labelText];
}
- (void) setRightLabelText: (NSString *) labelText
{
[[self rightLabel] setText:labelText];
}
@end
mySwitch = [[CustomUISwitch alloc] initWithFrame:CGRectZero];
//Tried these, but did not work
//CGRect aFrame = mySwitch.frame;
//aFrame.size.width = 200;
//aFrame.size.height = 100;
//mySwitch.frame = aFrame;
[mySwitch setLeftLabelText: @"longValue1"];
[mySwitch setRightLabelText: @"longValue2"];
答案 0 :(得分:175)
最简单的方法是调整大小,作为视图:
UISwitch *mySwitch = [[UISwitch alloc] init];
mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75);
你不需要关心其他任何事情!
答案 1 :(得分:18)
这是mxg答案的快速3版本:
let mySwitch = UISwitch()
mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
答案 2 :(得分:7)
许多控件都是特定尺寸。如果您自己实现此功能,则应覆盖setFrame:
,调整frame参数以匹配控件的所需大小,然后将其传递给[super setFrame:]
。
如果你继承了具有这种行为的控件,那么实际上没有办法覆盖它,因为你的子类将继承超类的setFrame:
实现,它会修改你的框架矩形。如果不调用[super setFrame:]
,就无法设置控件的框架。
您很可能必须继承UIControl
并手动实施所需的属性/行为UISwitch
来解决此问题。
答案 3 :(得分:4)
UISwitch不是为定制而设计的。
我认为您最好的解决方案是下载您提到的其他问题中提到的自定义交换机实现之一。 UICustomSwitch或RCSwitch。他们都应该能够处理广泛的标签。
答案 4 :(得分:3)
没有选项可以在xib中调整uiswitch的大小,所以需要在控制器类中创建并调整它的大小,
UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectMake(0, 0, 10, 10)];
onoff.transform = CGAffineTransformMakeScale(0.50, 0.50);
[self.view addSubview:onoff];
答案 5 :(得分:2)
如果要调整通过Storyboard或nib的开关大小,可以继承UISwitch并覆盖awakeFromNib方法:
- (void)awakeFromNib {
self.transform = CGAffineTransformMakeScale(0.75, 0.75);
}
选择开关控件并将其类更改为自定义开关类。
答案 6 :(得分:1)
以下是代码中的解决方案:
UISwitch *mySwitchNewsletter = [[UISwitch alloc] initWithFrame: CGRectMake(varSettingsSwitchNewsletter_x,
varSettingsSwitchNewsletter_y,
varSettingsSwitchNewsletter_width,
varSettingsSwitchNewsletter_height)];
if (mySwitchNewsletter != nil) {
[varCommerceSettingsView addSubview:mySwitchNewsletter];
float mySwitchScaleFactor = (varSettingsSwitchNewsletter_scale / 100.0);
CGFloat dX=mySwitchNewsletter.bounds.size.width/2, dY=mySwitchNewsletter.bounds.size.height/2;
mySwitchNewsletter.transform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformMakeTranslation(-dX, -dY), mySwitchScaleFactor, mySwitchScaleFactor), dX, dY);
mySwitchNewsletter release];
}
其中varSettingsSwitchNewsletter_scale是从0到100(%)的int。
答案 7 :(得分:0)
// Just in case someone trying to hard code UISwitch in Xcode 6.4 the following is working
// in .h
@property UISwitch * onoff;
// in .m
self.onoff = [[UISwitch alloc] initWithFrame:CGRectMake(160, 40, 0, 0)];
_onoff.transform = CGAffineTransformMakeScale(0.50, 0.50);
[self.view addSubview:self.onoff];