如何调整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:]
,则无法设置控件的框架。
您很可能必须从UIControl
inheritance并手动实现您需要从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];