如何调整UISwitch?

我做了一个自定义的UISwitch(从这个职位) 。 但问题是,我的自定义文本有点长。 有没有办法调整交换机的大小? [我尝试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"]; 

最简单的方法就是调整它的大小,

  UISwitch *mySwitch = [[UISwitch alloc] init]; mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75); 

而且你不必关心其他事情

这里是mxg的swift 3版本的答案:

 let mySwitch = UISwitch() mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75) 

许多控件意味着是一个特定的大小。 如果你自己实现这个,你可以重载setFrame:调整frame参数来匹配你的控件所需的大小,然后把它传递给[super setFrame:]

如果你有一个具有这种行为的控件的子类,实际上没有办法来覆盖它,因为你的子类将inheritance超类的setFrame:它修改你的框架矩形的实现。 如果不调用[super setFrame:] ,则无法设置控件的框架。

您很可能必须从UIControlinheritance并手动实现您需要从UISwitch执行的属性/行为才能解决此问题。

UISwitch不是为了定制而devise的。

我认为你最好的解决scheme是下载你提到的其他问题中提到的自定义开关实现之一。 UICustomSwitch或RCSwitch 。 他们都应该能够处理广泛的标签。

没有select在xib中调整uiswitch的大小,所以需要在控制器类中创build和调整它的大小,

  UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectMake(0, 0, 10, 10)]; onoff.transform = CGAffineTransformMakeScale(0.50, 0.50); [self.view addSubview:onoff]; 

如果你想通过Storyboard或者nib调整开关的大小,你可以inheritanceUISwitch并重写awakeFromNib方法:

 - (void)awakeFromNib { self.transform = CGAffineTransformMakeScale(0.75, 0.75); } 

select开关控制,并将其更改为您的自定义开关类。

在这里输入图像说明

这是一个代码解决scheme:

 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(%)的整数。

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